2011-10-19 14 views
0

こんにちはすべてイムは、トラブルのエンティティを拡張し、データベースにそれらを永続化を持つ、私のモデルはfolows、キャスティングエンティティJPA 2、春3

人々持っている -
友達を持続する必要がある基本エンティティ、 - 葉をエンティティ
同僚の葉のエンティティ

問題は、私がデータベースから人を取得し、それから友人にしたいのではなく、同じ値の別の人の行を作成したい既存のものを取る。

私は継承戦略を使用して私の継承戦略があります。

任意の手がかり??

答えて

2

"リーフエンティティ"とは "友人と同僚が人を継承する"ということですか?

達成しようとしていることは、継承を使用するのに適していません。

は単なるオブジェクト指向の方法で考える:あなたは(他のコメントで示唆したように、代わりに人々の人を使用する方が合理的である)「人物」をインスタンス化している

、あなたはそのインスタンスが "になることはできません友人"。

Friend/Corkorkerの別のエンティティを作成し、Personが持つ別の属性として扱うことを検討する必要があります。例えば

@Entity 
class Person { 
    @OneToOne(mappedBy="people") 
    FriendAttribute friendAttribute; 

    @OneToOne(mappedBy="people") 
    CoworkerAttribute coworkerAttribute; 
} 


@Entity 
class FriendAttribute { 
    @OneToOne 
    Person person; 

    // other friend-related attributes 

} 

@Entity 
class CoworkerAttribute { 
    @OneToOne 
    Person person; 

    // other coworker-related attributes 

} 

このようにして、Personを同僚にしたい場合、そのPersonに同僚属性を割り当てます。

正に、この質問はHibernateまたはJPAとは関係ありません。私が前に提案したように、単純なPOJOでは単純に機能しません。 Javaでは、クラスのインスタンスを別のクラスのインスタンスにすることはできません。

+0

優れた点。また、PersonクラスのPersonへの名前を変更することも考えています。結局のところ、クラスは1人であり、複数ではありません。 :-) –

+0

命名に同意します。実際には私はちょうど元の投稿の命名に従っています...正に、私は "友人"はこのような場合に良い名前だとは思わない...:P Lemmeはちょっと彼らに少しを修正します –

+0

すべてのコメントのために、私は子のエンティティのpkは親テーブルのPKとFKの両方になるので、私の問題は継承のための結合戦略のコンセプトにあると考えてください。 PS: "Make it"を参照すると、 "Person"テーブルのすべてのデータを持つ "Friend"というテーブルにレコードを保存することを意味します –