【发布时间】:2013-06-02 01:20:20
【问题描述】:
我有两个具有双向一对多关系的实体:
@ManyToOne
@JoinColumn(name = "department_id")
public Department getDepartment() {
return department;
}
@OneToMany(mappedBy="department")
public Collection<EmployeeMapping> getEmployees() {
return employees;
}
这是我的单元测试:
Department object = new Department();
object.setName("Test Department Object");
assertEquals("Object ID is not persistent yet", 0L, object.getId());
EmployeeMapping employee1 = new EmployeeMapping();
employee1.setName("Employee 1");
EmployeeMapping employee2 = new EmployeeMapping();
employee2.setName("Employee 2");
Collection<EmployeeMapping> collection = ImmutableSet.of( employee1, employee2 );
object.setEmployees( collection );
departmentDao.save(object);
assertNotEquals("Object ID is persistent", 0L, object.getId());
Department actualObject = departmentDao.get( object.getId() );
assertEquals("The actual object in the database must be equal to the original value", object, actualObject);
employee1 和employee2 未保存。测试执行后,它们不会出现在表中。 actualObject - Departme 类型 - 确实存在。
我的问题是为什么当我得到一个部门时使用:departmentDao.get( object.getId() ); actualObject 有一个员工集合,尽管他们不能从表中卸载。他们没有得救。也许 departmentDao 在内部使用了缓存。我不确定,请解释一下。
无论如何,我希望 object 和 actualObject 在此测试中不相等。我该如何存档?我希望他们只有在我拯救两个员工时才能平等。
最后一个问题,实体保存的顺序。员工和部门之间都有链接。是双向的关系。我应该先保存一个部门,然后再保存员工,还是顺序无关紧要?你能帮我解释一下吗? 谢谢。
【问题讨论】: