0

以下の状況で JPA-hibernate の動作を理解しようとしています。

1 対多の関係を持つ部門と従業員の 2 つのエンティティがあります。JPA-Hibernateを使用してこれを実装しようとしています。

ここに私の部門エンティティがあります:

@Entity
@Table(name="DEPARTMENT")
public class Department {

    @Id   
    @GeneratedValue   
    @Column(name="DEPARTMENT_ID")
    private Long departmentId;

    @Column(name="DEPT_NAME")
    private String departmentName;

    @OneToMany(mappedBy="department")
    private Set<Employee> employees;
}

ここに私の従業員エンティティがあります:

@Entity
@Table(name="EMPLOYEE")
public class Employee {

    @Id
    @GeneratedValue
    @Column(name="employee_id")
    private Long employeeId;

    @Column(name="firstname")
    private String firstname;

    @Column(name="lastname")
    private String lastname;

    @ManyToOne(fetch = FetchType.lazy)
    @JoinColumn(name="department_id")
    private Department department;

    public Employee() {

    }

    public Employee(String firstname, String lastname, String phone) {
        this.firstname = firstname;
        this.lastname = lastname;
        this.birthDate = new Date(System.currentTimeMillis());
        this.cellphone = phone;
    }

}

従業員を取得している間、部門を取得したくありません。そこで、FetchType.lazy を使用します。少数の従業員が 2 つの部門に関連付けられているとします。そのような場合、従業員を取得すると、部門に複数のレコードがあるという例外が発生します。私は FetchType.lazy を使用しているため、Department は早期にフェッチされるべきではなく、従業員が 1 つの部門または 2 つの部門に関連付けられているかどうかに関係なく、従業員をフェッチできるはずです。

例外が発生する理由を正確に理解できる人はいますか?

ありがとう。

4

0 に答える 0