【问题标题】:Hibernate: Do both merge and update via annotationHibernate:通过注释进行合并和更新
【发布时间】:2016-08-29 14:50:08
【问题描述】:

我有三个实体和相关类:BulkEmployee、BulkEmployeeRow 和 Department BulkEmployeeRow 包含 BulkEmployee 和 Department 的对象,如下所示:

@ManyToOne
BulkEmployee bulkEmployee;
@ManyToOne(fetch = FetchType.EAGER)
@Cascade(value = { CascadeType.SAVE_UPDATE })
Department department

现在有一个 UI,可以在其中批量创建多个员工。此页面具有自动保存功能,因此任何更改都会触发休眠 saveOrUpdate

用户可以在页面中添加多个员工行。每个员工行都可以选择从现有部门列表中选择一个部门,或者他们可以填写表格来创建一个新部门

现在的问题是,当用户为多个员工选择同一部门时,会出现以下异常:

org.hibernate.NonUniqueObjectException:一个不同的对象与 相同的标识符值已与会话关联

如果我将部门的 CascadeType 更改为 MERGE,如下所示:

@ManyToOne(fetch = FetchType.EAGER)
@Cascade(value = { CascadeType.MERGE })
Department department

然后为不同的员工选择相同的部门可以正常工作,但选择新部门会出现以下异常:

org.hibernate.TransientObjectException: 对象引用了一个未保存的 瞬态实例 - 在刷新之前保存瞬态实例:

有没有办法让 hibernate 进行合并,然后仅通过注释保存?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    好的,所以我猜不可能通过注释来实现。

    所以,正如到处建议的那样,我做到了

    dao.merge(entity)
    

    然后

    dao.saveOrUpdate(entity)
    

    解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多