【问题标题】:Hibernate: Update empty child tableHibernate:更新空子表
【发布时间】:2018-01-06 18:35:58
【问题描述】:

@OneToMany(mappedBy="columnOne", orphanRemoval=true, cascade=CascadeType.ALL) @LazyCollection(LazyCollectionOption.FALSE) private List<Constraint> constraints = new ArrayList<Constraint>();

每当父子记录更新时,子表记录也应该更新。

当我厌倦了 session.SaveOrUpdate() 时,父表记录得到更新,但每次插入新记录时子表都没有更新,这会导致重复数据

当厌倦了 session.merge() 时,出现错误,A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: com 因为约束可能为空,因为子表并非总是有数据

为了解决这个问题,尝试设置空集合,但这会导致数据库中有很多行具有空值。

即使子表数据可能为空,是否有任何方法可以同时更新 Parent 和 Child

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    每当父子记录更新时,子表记录 也应该更新。

    Hibernate 脏检查会为您做到这一点,您只需要管理所有实体,默认情况下休眠对托管实体的任何更改将检查所有管理实体及其属性,请查看此 link 了解更多信息

    当我厌倦了 session.SaveOrUpdate() 时,父表记录得到了 更新但每次插入新记录时子表都不会 更新导致重复数据

    我猜你的子实体没有被管理并且没有设置 id 值,所以是的,你的子实体将被级联(因为这是你通过设置 cascadetype 想要的),并将作为新记录保存在你的数据库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      相关资源
      最近更新 更多