2016-08-25 153 views
0

我使用Hibernate 4作爲Angular/Spring/Oracle項目中的ORM工具。Hibernate @OneToMany不刪除子項從底層集合刪除

我有我的父母Portfolio如下類別的雙向@OneToMany關係:

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

和我的孩子實體PortfolioContributors一個@ManyToOne關係。

@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嗨,我只是做了Hibernate的保存(組合)和投資組合對象包含了一組所有有效portfolioContribuotrs的。 我不是從投資組合等手動移除portfolioContributor。 如果portfolioContributor未包含在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)。不完全一樣的東西,但足夠接近。 Aslo看看[這個SO線程](http://stackoverflow.com/a/23926548/4074715)。 –