一尘不染

Hibernate-持久多态联接

hibernate

我试图了解如何在hibernate中最好地实现多态一对多。

例如:

@MappedSuperclass
public class BaseEntity  {
    Integer id;
    // etc...
}

@Entity
public class Author extends BaseEntity {}

@Entity
public class Post extends BaseEntity {}

@Entity
public class Comment extends BaseEntity {}

现在,我想保留以下类的审核信息:

@Entity
public class AuditEvent {
    @ManyToOne // ?
    BaseEntity entity;
}

什么是适当的映射auditEvent.entity?另外,Hibernate实际上将如何坚持下去呢?将一系列连接的表的生成(AuditEvent_AuthorAuditEvent_PostAuditEvent_Comment),或者是有没有更好的办法?

请注意,我宁愿不要让我的其他实体类暴露联接的另一面(例如List<AuditEvent> eventson
BaseEntity),但是,如果这是最干净的实现方式,那就足够了。


阅读 201

收藏
2020-06-20

共1个答案

一尘不染

映射的超类不是实体,因此不能成为关联的一部分(如EJB-199中所提醒)。所以:

  • 做出BaseEntity摘要并使用TABLE_PER_CLASS策略
  • 在层次结构中引入另一个AuditableEntity 实体 ,并使用最[适合您的用例的继承策略
  • 考虑使用Envers](http://www.jboss.org/envers)
2020-06-20