当前位置: 首页 > 面试题库 >

Hibernate-持久多态联接

子车英达
2023-03-14
问题内容

我试图了解如何在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),但是,如果这是最干净的实现方式,那就足够了。


问题答案:

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

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


 类似资料:
  • 1. 前言 本节课和大家聊聊持久化对象的 3 种状态。通过本节课程,你将了解到: 持久化对象的 3 种状态; 什么是对象持久化能力。 2. 持久化对象的状态 程序运行期间的数据都是存储在内存中。内存具有临时性。程序结束、计算机挂机…… 内存中的数据将不复存在。 重要的数据,需要使用持久化技术将数据保存到永久性设备上。Hibernate 能够通过 PO(持久化对象) 将数据持久化到数据库。 Hibe

  • persistenceException:DB2 SQL错误:sqlcode=-206,sqlstate=42703,sqlerrmc=t0.id,driver=3.52.95{prepstmnt 1029586270

  • 持久化类(Persistent Object )简称 PO,在 Hibernate 中, PO 是由 POJO(即 java 类或实体类)和 hbm 映射配置组成。 简单点说,持久化类本质上就是一个与数据库表建立了映射关系的普通 Java 类(实体类),例如 User 类与数据库中 user 表通过映射文件 User.hbm.xml 建立了映射关系,此时 User 就是一个持久化类。 持久化类的规

  • 问题内容: 我正在尝试创建事务管理器,并将其与Hibernate for Oracle一起使用。 我的persistence.xml文件是: 在spring的applicationContext.xml中,我添加了: 但是,当我运行时: 我有一个例外: Hibernate基础文件文件除外。 可能是什么问题呢? Hibernate持久性如何知道引用Spring bean? 问题答案: 持久性提供程序

  • 主要内容:JPA级联持久化示例,输出结果级联持久化用于指定如果实体持久化,则其所有关联的子实体也将被持久化。 以下语法用于执行级联持久性操作 - JPA级联持久化示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步:

  • 问题内容: 我在很大程度上依赖localStorage来编写插件。所有用户设置都存储在其中。有些设置要求用户写正则表达式,如果他们的正则表达式规则在某个时候消失了,他们会感到很遗憾。所以现在我想知道localStorage的持久性如何。 从规格: 用户代理应仅出于安全原因或在用户要求时才使本地存储区中的数据过期。 上面看起来像在客户端上的cookie一样工作。即,当用户清除所有浏览器数据(历史记录