以下の状況で 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 つの部門に関連付けられているかどうかに関係なく、従業員をフェッチできるはずです。
例外が発生する理由を正確に理解できる人はいますか?
ありがとう。