Department と Employee の間に 1-m の関係があり、その部署には多くの従業員がいて、1 人の従業員は 1 つの部署にしか所属できないとします。Employee テーブルに depId を外部キーとして持っています。以下は、エンティティがセッターとゲッターでどのように見えるかです。
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long empId;
private String name;
@ManyToOne
@JoinColumn(name = "deptId")
private Department dept;
public Long getEmpId() {
return empId;
}
}
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long deptId;
private String name;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "deptId")
@IndexColumn(name = "idx")
private Set<Employee> listEmp;
}
以前の部門には属性 mapsBy があり、両方のエンティティに joinColumn があり、両方のエンティティが関係の所有者ですよね?
私の疑問は、最初に部門を作成してから、一連の従業員を作成し、作成した部門を設定して、正常に機能する部門オブジェクトを保存することです。しかし、次に、部門を作成して従業員を作成し、そこに部門を設定して、例外の下にある従業員オブジェクトを保存しようとしました。
Hibernate: Employee (deptId, name) の値 (?, ?) に挿入 スレッド "main" org.hibernate.TransientObjectException で例外: オブジェクトが未保存の一時インスタンスを参照 - フラッシュする前に一時インスタンスを保存: hello.domain.Department
両方の方法で機能するべきではありませんか?