Orm 关于JPA2中的关系管理
我对管理关系中的实体感到困惑。根据PRO-JPA2一书,应该在关系的两端手动配置和分配关系Orm 关于JPA2中的关系管理,orm,jpa-2.0,eclipselink,Orm,Jpa 2.0,Eclipselink,我对管理关系中的实体感到困惑。根据PRO-JPA2一书,应该在关系的两端手动配置和分配关系 @Entity public class Employee { .. @ManyToOne(cascade=CascadeType.PERSIST) private Department department; .. } @Entity public class Department { .. @OneToMany(mappedBy="department"
@Entity
public class Employee {
..
@ManyToOne(cascade=CascadeType.PERSIST)
private Department department;
..
}
@Entity
public class Department {
..
@OneToMany(mappedBy="department")
private Set<Employee> employees = new HashSet<Employee>();
public void addEmployee(Employee e){
getEmployees().add(e);
e.setDepartment(this);
}
}
现在,考虑这个关系。
@Entity
public class Employee {
..
@ManyToOne(cascade=CascadeType.PERSIST)
private Department department;
..
}
@Entity
public class Department {
..
@OneToMany(mappedBy="department")
private Set<Employee> employees = new HashSet<Employee>();
public void addEmployee(Employee e){
getEmployees().add(e);
e.setDepartment(this);
}
}
考虑第[1]行:
我认为这不会用正确的部门ID正确地更新Employee表,但我检查了Derby,它能够正确地执行更新
考虑第[2]行:
根据这本书,这是正确的方法
Eclipselink/Derby/JPA2如果您按照第[1]行中的方式执行,则员工“e1”将存储在数据库中,FK为ok,但是。。。如果您获取Department dept1并调用getEmployees();员工“e1”将不在此列表中。即使您进行新的查询以再次从数据库中获取该部门;它不会有员工“e1”(至少在您重新提交应用程序之前不会)。这就是为什么你应该总是这样做的原因[2]
当我开始使用JPA2时,我并不知道这一点;并且像[1]中那样持久化实体。我几乎疯狂地试图确定为什么最近保存的实体没有被JPA读取,而是实际存储在DB中