在我的例子,Employee有一个OneToOne以关系Department与CascadeType.PERSIST.当我坚持多次Employee,
为什么EntityManager持续Department记录所有Employee记录?
我的期望是,如果我们使用CascadeType.PERSIST,当一个Employee被持久化时,Department将为每个Employee记录重新创建一条记录.
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;
-----
}
Run Code Online (Sandbox Code Playgroud)
Department.java
@Entity
public class Department implements Serializable {
private String id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
Jam*_*mes 13
JPA维护对象标识,不会保留现有对象.
将代码更改为正确,
for(int i=1; i <= 10; i++) {
Department department = new Department("Test Department");
Employee e = new Employee("EMP" + i, department);
em.persist(e);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34444 次 |
| 最近记录: |