2016-08-25 6 views
0

私は、Angular/Spring/Oracleプロジェクト内でORMツールとしてHibernate 4を使用しています。Hibernate @OneToManyは、基礎となるコレクションからの削除時に子を削除しません。

@OneToMany(mappedBy = "portfolio", fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, orphanRemoval = true) 
@JsonManagedReference 
private Set<PortfolioContributors> portfolioContributors; 

と私の子エンティティPortfolioContributors@ManyToOne関係:

は、私は以下のように私の親クラス Portfolioにおける双方向 @OneToMany関係を有しています。

@ManyToOne 
@JoinColumn(name = "PORTFOLIO_ID", referencedColumnName = "PORTFOLIO_ID", foreignKey = @ForeignKey(name = "FK_PORTFOLIO_CONTRIBUTORS"), nullable = false) 
@JsonBackReference 
private Portfolio portfolio; 

問題は、親クラスの子エンティティのセットからエントリを削除する場合です。データベースからの削除/削除は設定されません。

この動作を実現するにはどうすればよいですか?

答えて

1

また、関係の反対側にnullを設定する必要があります。このような何か:

Portfolio portfolio = ...; 
PortfolioContributors portfolioContributors = ...; 

portfolio.getPortfolioContributors().remove(portfolioContributors); 
portfolioContributors.setPortfolio(null); 
+0

こんにちは@Predrag、私はちょうど(ポートフォリオ)を保存休止をしていますし、ポートフォリオオブジェクトは、すべての有効なportfolioContribuotrsのセットが含まれています。 ポートフォリオなどからportfolioContributorsを手動で削除していません PortfolioオブジェクトのSet にない場合、portfolioContributorを自動的に削除します。 –

+0

Hibernateは双方向関係の反対側を処理しません。あなたはそれを自分で行う必要があります。あなたのユースケースは少し特殊ですが、削除するPortfolioContributorsインスタンスで 'setPortfolio(null)'を実行する必要があります。関係の所有側であるため、保存する必要があります。 –

+0

[Hibernateのドキュメント](https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/example-parentchild.html#example-parentchild-cascades)のコード例を参照してください。まったく同じことではないが、十分に近い。同様に[this SO thread](http://stackoverflow.com/a/23926548/4074715)をチェックしてください。 –

関連する問題