0

Person と Phone (1 対多の関係) の 2 つのエンティティがあります。JoinTable を使用したい:

class Person

    @OneToMany()
    @JoinTable(name="PERSON_PHONES", 
            joinColumns={ @JoinColumn(name="PERSON_ID") },
            inverseJoinColumns={ @JoinColumn(name="PHONE_ID") })
public List<Phone> getPhones(){...}

しかし、なぜかJoinTableが使えないので、クラスPersonPhoneを書く必要があります。関係に疑問を感じる、こんな感じでしょうか?

Person -> PersonPhone: 1 対多の双方向 PersonPhone -> Phone: 1 対 1 の単方向

もう 1 つの質問ですが、このカスケード ルールを定義すると、次のようになります。

class Person {

@OneToMany(cascade=CascadeType.ALL,mappedBy="person")
public List<PersonPhone> getPersonPhones() {...}
...
}

class PersonPhone {

@OneToOne(cascade=CascadeType.ALL)
public Phone getPhone(){...}
...
}

// class phone has not fields for this relation

個人が削除されると、個人の電話は削除されますか?

4

1 に答える 1

2

結合テーブルを使用できない理由は不明ですが、この設計を維持すると、はい、cascade=CascadeType.ALL両方の関連付けで定義した のおかげで、人を削除するとその が削除されPersonPhone、 にカスケードされPhoneます。

エンティティは、PersonPhoneperson 属性と phone 属性以外の属性を持っている場合にのみ役立ちます。

于 2011-11-03T12:31:06.803 に答える