这是 Hibernate ORM 5.3 系列的第一个 Beta 版本。5.3 代表了在 5.2 版本之上兼容 JPA 2.2 的版本,包括以下讨论的更改。

查看 Jira 以获取更改的完整列表 更改

查看 下载 页面以获取此版本的详细信息

注意:我们在将文档上传到 JBoss 文档服务器时遇到了一些问题。因此,文档可能目前无法在线获取。在这种情况下,可以从 SourceForge 的发布捆绑包中获取文档。请参阅 下载 页面

JPA 2.2 功能

CDI 托管的 AttributeConverters

从 JPA 2.1 开始,应用程序可以使用 CDI 托管的 Bean 作为实体事件监听器。JPA 2.2 扩展了这种支持,允许 AttributeConverters 也作为 CDI 托管的 Bean。

为此,我们开发了一个通用接口,允许访问任何类型 DI/Bean 容器中托管的任何类型的 Bean。此类 Bean 容器集成的合同是 org.hibernate.resource.beans.container.spi.BeanContainer。Hibernate 提供了与 CDI 集成的 BeanContainer 实现;我们还测试了将其适配到 Spring 容器。一般来说,Hibernate 通过其 org.hibernate.resource.beans.spi.ManagedBeanRegistry 服务访问 BeanContainer,该服务隐藏了基于 Hibernate 常规使用的 BeanContainer 的某些重复细节。

应用程序通常不会访问 BeanContainerManagedBeanRegistry。但是,集成人员可能希望使用它们来利用 Hibernate 与这些后端容器的集成。 ManagedBeanRegistry 是一种服务,可以通过 SessionFactory 的 ServiceRegistry 访问。可以通过 ManagedBeanRegistry#getBeanContainer(可能返回 null)从那里访问 BeanContainer

对重复注解的支持

JPA 2.2 定义了对重复注解(@java.lang.annotation.Repeatable)的支持。这包括添加了 @TableGenerators@SequenceGenerators。所有其他 JPA 注解已经拥有了“包含”注解。

查询结果流式传输

JPA 2.2 增加了 Query#getStream 以支持查询结果的流式传输。当然,Hibernate 已经有了这个功能,尽管我们将其命名为 Query#stream,以更符合其他大多数使用情况,包括 JDK 的大多数使用情况。但无论如何,两者都是可用的。即 JPA 的 javax.persistence.Query#getStream 和 Hibernate 的 org.hibernate.query.Query#stream

支持 Java 8 日期和时间 API

这同样是 Hibernate 已经支持很长时间的东西。但 JPA 2.2 已经将支持 Java 8 日期/时间 API 作为标准。

Hibernate 功能

缓存和继承

5.3 添加了在任何映射层次结构级别启用/禁用缓存的能力。这与之前版本不同,之前版本仅允许在根实体上控制缓存。有关详细信息,请参阅 HHH-12146

Java 9 模块命名

Hibernate ORM JAR 现在指定 Java 9 模块命名,格式为 org.hibernate.orm.${module-name}。例如,hibernate-core 的模块名称是 org.hibernate.orm.corehibernate-c3p0 的模块名称是 org.hibernate.orm.c3p0;等等。

JpaCompliance

在引导过程中,SessionFactory/EntityManagerFactory 可以配置为具有“JPA 兼容性”级别,以指示其应遵守的行为。这些通常是 Hibernate 历史上做得不同或我们认为规范不是最佳解决方案的情况。此 JpaCompliance 用于控制 Hibernate 在这些情况下的行为。有关 org.hibernate.jpa.JpaCompliance 的详细信息,请参阅 javadocs。

更直观地处理 ID 生成器名称

以前,当 Hibernate 遇到与标识符相关的 @GeneratedValue 时,它会假设存在一个匹配的命名生成器注解。例如,如果应用程序指定了 @GeneratedValue(strategy=TABLE, name="abc"),Hibernate 会期望看到一个同名的 @TableGenerator@org.hibernate.annotations.GenericGenerator。这意味着您经常看到以下映射:

@Entity
public class AnEntity {
    @Id
    @GeneratedValue(strategy=SEQUENCE, name="MY_SEQ")
    @SequenceGenerator(name="MY_SEQ", sequenceName="MY_SEQ")
    public Long getId() {...}

    ...
}

上述示例中的 SequenceGenerator 添加了没有额外的信息,实际上是完全不必要的。因此,Hibernate 现在以与上述映射完全相同的方式识别以下映射:

@Entity
public class AnEntity {
    @Id
    @GeneratedValue(strategy=SEQUENCE, name="MY_SEQ")
    public Long getId() {...}

    ...
}

Vibur 连接池集成

新的 hibernate-vibur 模块定义了作为 org.hibernate.engine.jdbc.connections.spi.ConnectionProvider 实现的 Vibur 连接池集成。

错误、任务、杂项

  • 删除了对旧 HQL 风格位置参数的支持

  • 添加了 Travis CI 支持

  • 恢复上传 Javadoc JAR 到 Maven

  • 弃用环境作用域设置

  • 删除 hibernate-infinispan 模块 - 已迁移到 org.infinispan:infinispan-hibernate-cache


返回顶部