我有两个可以被用户评论的实体(比方说:新闻和文章)。是否可以使用一个评论实体并将它们附加到两个实体?
我通过创建一个抽象超类(AbstractCommentableEntity
)来尝试它,它处理与评论的关系(CommentabeEntity1
和CommentabeEntity2
)。然后,新闻和文章实体将扩展此类,并且可以将注释附加到它们。查看我的图片以及我的代码。
但是如果我这样实现它,我会得到一个Mapping异常。我想那是因为我试图映射一个@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{
}
答案 0 :(得分:0)
您不应该使关联成为双向的:因此评论将是一个通用实体,可以附加到任何类型的实体。 News
和Article
实体都会有一组评论。
默认情况下,这将使用两个连接表进行映射:一个链接评论和新闻,另一个链接评论和文章。
如果您确实希望关联是双向的,那么您可以使用AbstractComment
实体,其中包含两个子实体:NewsComment
和ArticleComment
。 NewsComment
与News
具有双向ManyToOne关联,ArticleComment
与Article
具有双向ManyToOne关联。