2017-05-30 120 views
1

我在,用戶可以從列表中刪除子實體的情況:刪除子實體時重新連接父實體

@Entity 
public class StandaredPriceTag { 
. 
. 
. 
@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER,mappedBy="standaredPriceTag") 
List<StandaredPrice> standaredPriceList = new ArrayList<>(); 

@Entity 
public class StandaredPrice { 
    . 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "standard_price_tag_id") 
    private StandaredPriceTag standaredPriceTag; 
    . 

據我瞭解,只要StandaredPriceTag附加到實體管理器,任何更新都會反映到數據庫中。現在,當我從List<StandaredPrice> standaredPriceList中刪除一個項目,然後將StandaredPriceTag重新添加爲entityManager.merge(standaredPriceTag);時,子實體仍然存在。

回答

3

您需要更進一步設置@OneToMany上的孤兒刪除。使用標準CascadeType.DELETE,您需要明確刪除該實體。隨着孤兒的刪除,你只需要從列表中清除它,就像你做的那樣:

@OneToMany(cascade = { CascadeType.ALL } 
    , fetch = FetchType.EAGER,mappedBy="standaredPriceTag" 
    , orphanRemoval = true) 
List<StandaredPrice> standaredPriceList = new ArrayList<>(); 
+0

像魔術一樣工作 –