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具有注释集合。

默认情况下,这将使用两个连接表进行映射:一个链接评论和新闻,另一个链接评论和文章。

如果您真的希望关联是双向的,那么您可以使用AbstractComment具有两个子实体的实体:NewsCommentArticleComment. NewsComment将与 具有双向多对一关联News,并且与ArticleComment具有双向多对一关联Article

于 2013-08-16T13:03:10.313 回答