Hibernate JPA-将实体映射到多个其他实体
我有两个实体可以被用户评论(比如说:新闻和文章)。是否可以使用一个注释实体并将其附加到两个实体 我通过创建一个抽象超类(Hibernate JPA-将实体映射到多个其他实体,hibernate,inheritance,jpa,orm,polymorphism,Hibernate,Inheritance,Jpa,Orm,Polymorphism,我有两个实体可以被用户评论(比如说:新闻和文章)。是否可以使用一个注释实体并将其附加到两个实体 我通过创建一个抽象超类(AbstractCommentableEntity)来尝试它,该类处理与注释的关系(将是CommentableEntity1和CommentableEntity2)。然后,news和article实体将扩展这个类,并且可以向它们附加注释。查看我的图像和代码 但是如果我这样实现它,我会得到一个映射异常。我想这是因为我试图映射一个@MappedSuperclass注释类。有没有办法
AbstractCommentableEntity
)来尝试它,该类处理与注释的关系(将是CommentableEntity1
和CommentableEntity2
)。然后,news和article实体将扩展这个类,并且可以向它们附加注释。查看我的图像和代码
但是如果我这样实现它,我会得到一个映射异常。我想这是因为我试图映射一个@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;
}
}
您不应该使关联具有双向性:因此,注释将是一个通用实体,可以附加到任何类型的实体。
新闻
和文章
实体都有一组评论
默认情况下,这将使用两个连接表进行映射:一个链接注释和新闻,另一个链接注释和文章
如果您确实希望关联是双向的,那么您可以使用一个AbstractComment
实体,它有两个子实体:newcomment
和articleccomment
NewsComment
将与News
具有双向多通关联,ArticleComment
将与Article
具有双向多通关联
public class CommentabeEntity2 extends AbstractCommentableEntity{
}