JPA CascadeType.PERSIST如何工作?

在我的示例中, EmployeeDepartment with CascadeType.PERSIST具有OneToOne关系。 当我坚持多个Employee


为什么EntityManager为所有Employee记录保留单个Department记录?


我的期望是,如果我们使用CascadeType.PERSIST ,当持久化Employee时,将为每个Employee记录重新创建一个Department记录。

Employee.java

 @Entity public class Employee { private String id; private String name; @OneToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "DEP_ID", referencedColumnName = "ID") private Department department; ----- } 

Department.java

 @Entity public class Department implements Serializable { private String id; private String name; } 

Test.java

 public void insert() { em = emf.createEntityManager(); em.getTransaction().begin(); Department department = new Department("Test Department"); for(int i=1; i <= 10; i++) { Employee e = new Employee("EMP" + i, department); em.persist(e); } em.getTransaction().commit(); em.close(); } 

结果:

 Employee Table Department Table ================= ============================== ID Name DEP_ID ID NAME ================= ============================== 1 EMP1 1 1 Test Department 2 EMP2 1 3 EMP3 1 4 EMP4 1 5 EMP5 1 6 EMP6 1 7 EMP7 1 8 EMP8 1 9 EMP9 1 10 EMP10 1 

JPA维护对象标识,不会保留现有对象。

将代码更改为正确,

 for(int i=1; i <= 10; i++) { Department department = new Department("Test Department"); Employee e = new Employee("EMP" + i, department); em.persist(e); }