JPA CascadeType.PERSIST如何工作?
在我的示例中, Employee
与Department
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); }
- 单击按钮后需要读取两个JTextfields的输入
- 是否有另一种方法可以在Spring Boot中获取WebServiceTemplate而不是WebServiceGatewaySupport#getWebServiceTemplate()?
- 为什么我们需要在接口中指定参数名称?
- 为什么一个类不能扩展枚举?
- 内部错误(javaClasses.cpp:129)
- Java子串打破编码
- Java 9中的SunPKCS11提供程序
- 如何使用Saxon java库命令行工具执行schematronvalidation?
- Spring JDBC + Postgres SQL + Java 8 – 从/到LocalDate的转换