JPA CascadeType.PERSIST如何工作? [英] How does the JPA CascadeType.PERSIST work ?
问题描述
在我的示例中,Employee
与具有CascadeType.PERSIST
的Department
具有OneToOne
关系.
当我坚持多个Employee
In my example, Employee
has an OneToOne
relationship to Department
with CascadeType.PERSIST
.
When I persist multiple Employee
,
为什么EntityManager
为所有Employee
记录保留单个Department
记录?
Why does the EntityManager
persist a single Department
record for all Employee
records?
我的期望是,如果我们使用CascadeType.PERSIST
,则当持久保存Employee
时,将为每个Employee
记录重新创建一个Department
记录.
My expectation is, if we use CascadeType.PERSIST
, when an Employee
is being persisted, a Department
record will be created anew for each Employee
record.
Employee.java
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
Department.java
@Entity
public class Department implements Serializable {
private String id;
private String name;
}
Test.java
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维护对象标识,并且不会持久化现有对象.
JPA maintains object identity and will not persist an existing object.
将您的代码更改为正确的
Change you code to be correct,
for(int i=1; i <= 10; i++) {
Department department = new Department("Test Department");
Employee e = new Employee("EMP" + i, department);
em.persist(e);
}
这篇关于JPA CascadeType.PERSIST如何工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!