セルフ エンティティに 1 対 1 のマッピングを追加する方法。この例のように。Person自体の親子関係を持ちたいです。
@Entity
@Table(name="PERSON")
public class Person {
@Id
@Column(name="personId")
private int id;
@OneToOne
@JoinColumn()
private Person parentPerson;
}
セルフ エンティティに 1 対 1 のマッピングを追加する方法。この例のように。Person自体の親子関係を持ちたいです。
@Entity
@Table(name="PERSON")
public class Person {
@Id
@Column(name="personId")
private int id;
@OneToOne
@JoinColumn()
private Person parentPerson;
}
双方向セルフ マッピングの例を次に示し@OneToOne
ます (列名を SQL 表記に変更します)。
@Entity
@Table(name="PERSON")
public class Person {
@Id
@Column(name="person_id")
private int id;
@OneToOne
@JoinColumn(name = "parent_person_id")
private Person parentPerson;
@OneToOne(mappedBy = "parentPerson")
private Person childPerson;
}
しかし、この場合に使用する理由がわかりません@OneToOne
。
私はこのように使用しています:
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "PARENT_ID", nullable = true)
private Person parent;
サービス層から親を追加するには、データベースに少なくとも 1 つ存在している必要がありPerson
ます。
あなたがそうすると仮定しましょう。次に、新しい人物を作成します。例:
@Transactional
public void createPerson() {
Person parent = //get your parent
Person child = new Person();
if (parent != null) {
child.setParent(parent);
}
}
これがあなたの言いたいことなら..