我有两个具有双向一对多关系的实体:
@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。测试执行后,它们不在表中。departme类型的actualobject不存在。
我的问题是为什么当我得到一个部门使用: departmentDao.get( object.getId() );
这个 actualObject
有一个雇员集合,尽管他们不能从表中卸载。他们没有得救。也许departmentdao在里面使用了一个缓存。我不确定,请解释一下。
不管怎样,我想这样 object
以及 actualObject
在这个测试中是不相等的。如何存档?我希望只有当我拯救两个雇员时,他们才是平等的。
最后一个问题,实体保存的顺序。员工和部门之间都有联系。这是一种双向关系。我应该先保存一个部门,然后才保存员工还是订单无关紧要?你能给我解释一下吗。谢谢。
1条答案
按热度按时间pobjuy321#
“我希望实际对象和对象不同”:这取决于:
equals方法的实现
dao的set操作是否通过引用更新“object”
保存one2many的顺序:保存外键的对象应该最后保存。在这个例子中,您有:
雇员(雇员ID、姓名等…、部门ID)
部门(部门ID、部门名称等)
==>这意味着在保存员工时应该保存部门allready(部门id必须存在/已解析)。
actualobject(从departmendao检索)包含空的employee集合,因为这些employee并没有像您自己所说的那样保存。
希望这有帮助,干杯!