【发布时间】:2013-12-02 20:09:52
【问题描述】:
假设我们有以下实体:
@Entity
public class Department {
@OneToMany(mappedBy="department")
private List<Employee> employees;
}
@Entity
public class Employee {
@ManyToOne
private Department department
}
在更新上我们需要保持双方的关系如下,这是可以理解的:
Employee emp = new Employee();
Department dep = new Department();
emp.setDepartment(dep);
dep.getEmployees().add(emp);
到目前为止一切顺利。问题是我是否应该按如下方式在两侧应用合并,并且避免与级联进行第二次合并?
entityManager.merge(emp);
entityManager.merge(dep);
或者合并拥有方就足够了?这些合并也应该发生在事务或 EJB 中吗?还是在一个带有分离实体的简单控制器方法上做就足够了?
【问题讨论】:
-
如果你正在与数据库交互,你应该在一个事务中。无论您是否使用 JPA,这都是正确的。事务是通过调用 EJB 来显式启动还是隐式启动都无关紧要。两者都能胜任。
-
TomAnderson 所说的几乎总是正确的。例外情况是,当您进行查找时,您使用
LockModeType.NONE以外的锁查找。
标签: java hibernate jpa bidirectional-relation