我试图了解如何在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_Author
,AuditEvent_Post
,AuditEvent_Comment
),还是有更好的方式?
注意,我宁愿不让我的其他实体类公开连接的另一面(例如List<AuditEvent> events
上的BaseEntity
) - 但如果这是最干净的实现方式,那么它就够了。
答案 0 :(得分:5)
映射的超类不是实体,因此不能成为关联的一部分(在EJB-199中提醒)。所以:
BaseEntity
摘要并使用TABLE_PER_CLASS
策略(请参阅此previous answer)AuditableEntity
实体,并使用最适合您用例的appropriate inheritance strategy。