:抽象クラスを含む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
はどのように我々はCommentedEntity
とComment
間の双方向の関係をマッピングするのでしょうか?以下のコードは私が見つけた例の私の最高の解釈です。
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プロパティを双方向にマッピングしますか?
__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 –
申し訳ありません、Neil。私はもっと簡単な例を作る必要があり、私は間違いを犯しました。問題は、 'CommentedEntity'と' Comment'の間の双方向マッピングです。 'Person'は、このマッピングをその親から継承するので、プレイ中ではありません。混乱させて申し訳ありません。 – jacekn
あなたが提供したリンクを見ました。私の場合は、FKの口座/住所と同じです。具体的な 'Account'を使うところでは、抽象的な' CommentedEntity'を置く必要があります。 – jacekn