双向一对多的删除
為什么80%的碼農都做不了架構師?>>> ??
在使用JPA(hibernate)配置實體關系中,經常會遇到通過父實體對象級聯批量更新子對象的需求,而且每次更新必須采用合并方式,即原來的所有子刪除,只保留本次保存的所有子實體對象。
對于JPA中的雙向一對多的模型中,現實系統總會有要求刪除“多”一側的數據,舉例而言,訂單Order和訂單項OrderItem是一對多的關系
public class Order{
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.EAGER,orphanRemoval = true)
? ? private Set<OrderItem> items = new HashSet<>();
}
public class OrderItem {
@ManyToOne
? ? @JoinColumn(name = "order_id")
? ? private Order order;
}
當修改訂單的時候,有時候希望保持原有所有記錄的ID,刪除一部分OrderItem。那么我們就需要在Order一側對@OneToMany添加屬性?orphanRemoval = true,即刪除孤兒對象。
第一次保存:假設Order下有三個OrderItem, 保存Order后,OrderItem對象對應的數據表ID為:1,2,3
第二次保存:假設該Order刪除了id=1的OrderItem,同時添加了新的OrderItem,保存時候該新的對象的ID=4.那么保存該Order后,OrderItem對象的ID應該是2,3,4.(id=1的對象自動刪除,不需要任何干預)
這個就是自動去孤子功能。
需要注意的是,當修改對象時候,需要把其關聯的id和version提取到前臺,保存的時候需要設置回去。
轉載于:https://my.oschina.net/zhike/blog/474579
總結
- 上一篇: JSONProxy - 获取跨域json
- 下一篇: Python map, reduce,