重新附加父实体时删除子实体

时间:2017-05-30 14:52:07

标签: java hibernate jpa orm persistence

我有一种情况,用户可以从列表中删除子实体:

@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);时,子实体仍然存在。

1 个答案:

答案 0 :(得分:3)

您需要更进一步设置@OneToMany上的孤儿删除功能。使用标准CascadeType.DELETE,您需要显式删除实体。删除孤儿后,您只需要像清除它一样清除它:

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