20

私の例でEmployeeは、とのOneToOne関係がDepartmentありCascadeType.PERSISTます。複数持続するEmployeeと、


すべてのレコードに対してEntityManager単一のレコードを保持するのはなぜですか?DepartmentEmployee


私の期待は、を使用すると、が永続化されているCascadeType.PERSISTときに、レコードごとにレコードが新たに作成されることです。EmployeeDepartmentEmployee

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   
4

1 に答える 1

16

JPAはオブジェクトIDを維持し、既存のオブジェクトを永続化しません。

正しくなるようにコードを変更し、

for(int i=1; i <= 10; i++) {
    Department department = new Department("Test Department");
    Employee e = new Employee("EMP" + i, department);
    em.persist(e);
}
于 2012-10-16T13:49:24.433 に答える