1

ユーザーがコメントできるエンティティが 2 つあります (例: ニュースと記事)。1 つのコメント エンティティを使用して、両方のエンティティにアタッチすることはできますか?

AbstractCommentableEntityコメントとの関係を処理する抽象スーパークラス( )を作成して試してみました( CommentabeEntity1andになりますCommentabeEntity2)。ニュースと記事のエンティティは、このクラスを拡張し、コメントを添付できるようになります。私のイメージと私のコードを見てください。

しかし、そのように実装すると、マッピング例外が発生します。@MappedSuperclass アノテーション付きクラスをマップしようとしたためだと思います。これを実行する方法はありますか?

ここに画像の説明を入力

私のコメントエンティティは次のようになります。

@Entity
public class Comment {

    private AbstractCommentableEntity commentableEntity;

    @ManyToOne
    @JoinColumn
    public AbstractCommentableEntity getCommentableEntity() {
        return commentableEntity;
    }

    public void setCommentableEntity(AbstractCommentableEntity commentableEntity) {
        this.commentableEntity = commentableEntity;
    }
}

コメント可能なエンティティの抽象スーパークラスは次のようになります。

@MappedSuperclass 
public abstract class AbstractCommentableEntity {

    Set<Comment> comments = new HashSet<Comment>();

    @OneToMany(mappedBy = "commentableEntity")
    public Set<Comment> getComments() {
        return comments;
    }

    public void setComments(Set<Comment> comments) {
        this.comments = comments;
    }
}

そして、特定のエンティティはそれを次のように拡張します:

public class CommentabeEntity2 extends AbstractCommentableEntity{

}
4

1 に答える 1

0

関連付けを双方向にするべきではありません。したがって、コメントは、あらゆる種類のエンティティに添付できる汎用エンティティになります。NewsエンティティとエンティティのArticle両方に、コメントのコレクションがあります。

デフォルトでは、これは 2 つの結合テーブルを使用してマップされます。1 つは Comment と News をリンクし、もう 1 つは Comment と Article をリンクします。

関連付けを双方向にしたい場合はAbstractComment、 と の 2 つのサブエンティティを持つエンティティをNewsComment使用できますArticleCommentNewsCommentは との双方向の ManyToOne 関連付けを持ちNews、 とArticleCommentの双方向の ManyToOne 関連付けを持ちArticleます。

于 2013-08-16T13:03:10.313 に答える