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
的适当映射是auditEvent.entity
? 另外,Hibernate如何实际坚持这一点? 是否会生成一系列连接表( AuditEvent_Author
, AuditEvent_Post
, AuditEvent_Comment
),还是有更好的方法?
注意,我宁愿不让我的其他实体类暴露连接的另一端(例如, BaseEntity
上的List events
) – 但如果这是最干净的实现方式,那么它就足够了。
映射的超类不是实体,因此不能成为关联的一部分(如EJB-199中提醒的那样)。 所以要么:
- 使您的
BaseEntity
摘要并使用TABLE_PER_CLASS
策略(请参阅此前一个答案 ) - 在层次结构中引入另一个
AuditableEntity
实体 ,并使用适合您的用例的最合适的inheritance策略 。 - 考虑使用Envers
- 使用Spring和Hibernate的一些好的示例应用程序是什么?
- 如何根据给定的模式重新排列列表中的项目?
- 在hibernate实体上处理数据库视图的优雅方法?
- 如何从hibernate提供程序知道底层数据库名称
- JDK 9的Hibernate 5问题
- Hibernate java.lang.OutOfMemoryError:Java堆空间
- Java Oracleexception – “列表中的最大表达式数为1000”
- 从外部jar或外部类路径动态加载的Map实体
- @Transactional(noRollbackFor = RuntimeException.class)不会阻止RuntimeException上的回滚