【发布时间】: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 进行合并,然后仅通过注释保存?
【问题讨论】: