Hibernate:通过注释进行合并和更新

时间:2016-08-29 14:50:09

标签: java hibernate

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

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

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

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

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

  

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

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

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

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

  

org.hibernate.TransientObjectException:object引用未保存的   瞬态实例 - 在刷新之前保存瞬态实例:

有没有办法可以让hibernate做合并,然后只通过注释保存?

1 个答案:

答案 0 :(得分:0)

好的,我猜不可能通过注释来做。

所以,正如各地所建议的,我做了

dao.merge(entity)

然后

dao.saveOrUpdate(entity)

解决问题