Hibernate ORM 5.3.0.Final版本已经发布。
JPA 2.2 支持
Hibernate ORM 5.3实现了对JPA 2.2的支持。
CDI 托管的属性转换器
从JPA 2.1开始,应用程序可以使用CDI 托管的bean作为实体事件监听器。JPA 2.2扩展了这种支持,允许属性转换器也可以作为CDI 托管的bean。
为了便于实现,我们开发了一个通用接口,允许访问任何类型的bean,这些bean托管在任何类型的DI/bean容器中。集成此类bean容器的合约是org.hibernate.resource.beans.container.spi.BeanContainer
。Hibernate提供了与CDI集成的BeanContainer
实现;我们还测试了将其适配到Spring容器。
应用程序通常不会访问这些服务。但是,集成者可能希望使用它们来利用Hibernate与这些后端容器的集成。可以从org.hibernate.resource.beans.spi.ManagedBeanRegistry
访问BeanContainer
,这是一个服务,它根据Hibernate的正常使用隐藏了与BeanContainer
相关的重复细节。ManagedBeanRegistry
是一个服务,可以从SessionFactory的ServiceRegistry中访问。
重复注解的支持
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
。
缓存和继承
5.3 增加了在任何映射层次结构的级别上启用/禁用缓存的能力。这与之前版本不同,之前版本仅允许在根实体上控制缓存。有关详细信息,请参阅 HHH-12146。
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() {...}
...
}
二进制兼容性
Hibernate 5.2 引入了一些意外的(以及一些预期的)二进制不兼容性。Gail Badner 做了一个很好的工作,识别和分类了这些二进制不兼容性,这导致了一组工作来修复这些意外的二进制不兼容性,并在迁移指南中记录了预期的二进制不兼容性(如果尚未记录)。有关详细信息,请参阅 HHH-12424。