2016-03-31 12 views
1

抽象クラスを含むJPA双方向関係をマッピングするにはどうすればよいですか?次のような単純なスキーマと仮定

エンティティテーブルは - 一部の企業は、これらの

entityId, commentId, commentText,.... 

人のコレクションを持っている - すべてのエンティティ

entityId, timeCreated,... 

コメントテーブルに共通の属性表。

pensonId (entityId), firstName, lastName,... 

そして、次のJavaの継承構造:

BaseEntity - abstract - entity, join inheritance with a discriminator 
    CommentedEntity - abstract - introduces `comments` collection - mapping tbd 
     Person - concrete - entity - mapping trivial 

はどのように我々はCommentedEntityComment間の双方向の関係をマッピングするのでしょうか?以下のコードは私が見つけた例の私の最高の解釈です。

CommentedEntity

@OneToMany(mappedBy="owner", fetch=FetchType.EAGER) 
private List<Comment> comments = new ArrayList<>(); 

コメント

@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinColumn(name="entityId", referencedColumnName="entityId") 
private CommentedEntity owner; 
  • CommentedEntityので、抽象クラスであり、これは動作しません。 ownerは未知のエンティティを参照します。
  • CommentedEntityをエンティティにするには、IDを与える必要があります。だから私はそう思わないと思います。 。
  • 複数のコンクリートエンティティはcomments のコレクションを持つため、マッピングには具体的なエンティティ名を使用できません。

私たちはperson.commentListプロパティを双方向にマッピングしますか?

+0

__Comment__には__Person__にOneToManyがありますが、そのタイプは何か分かりません。あなたは__CommentedEntity__に__CommentedEntity__のManyToOneを持っていますか? (あなたは__Person__を意味しますか?)フィールド型が一貫性があり、永続化可能である限り(EntityまたはMappedSuperclass)、これを行うことができるはずです(少なくとも、私が使用する実装で可能です)。 www.datanucleus.org/products/accessplatform_4_2/jpa/orm/one_to_many_collection.html#join_bi –

+0

申し訳ありません、Neil。私はもっ​​と簡単な例を作る必要があり、私は間違いを犯しました。問題は、 'CommentedEntity'と' Comment'の間の双方向マッピングです。 'Person'は、このマッピングをその親から継承するので、プレイ中ではありません。混乱させて申し訳ありません。 – jacekn

+0

あなたが提供したリンクを見ました。私の場合は、FKの口座/住所と同じです。具体的な 'Account'を使うところでは、抽象的な' CommentedEntity'を置く必要があります。 – jacekn

答えて

0

PersonCommentedEntityを拡張するなら、あなたはPerson is part of a CommentedEntity`のでPersonエンティティのCommentedEntityownerを必要としません。つまり、PersonがCommentedEntityであるため、所有者フィールドは必要ありません。

+0

しかし、双方向マッピングには所有者が必要です。 'mappedBy =" owner "'これをどのようにマッピングするかの例を挙げることができますか? – jacekn

+0

あなたがそれを記述している方法には、双方向マッピングはありません。これは単なるエンティティであり、 'CommentedEntity'のサブクラスである' Person'です。これは 'BaseEntity'のサブクラスです。 'Persons'のコレクションを持っているのは何ですか? –

関連する問題