我有两个可以由用户评论的实体(例如:新闻和文章)。是否可以使用一个评论实体并将它们附加到两个实体?
我通过创建一个抽象超类 ( AbstractCommentableEntity
) 来尝试它,它处理与评论的关系(应该是CommentabeEntity1
and 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{
}