5.8.5. 从 Hibernate ORM 5.1 迁移到 Hibernate ORM 5.3
JBoss EAP 7.3 包括 Hibernate ORM 5.3。本节重点介绍从 Hibernate ORM 5.1 迁移到 Hibernate ORM 5.3 时需要进行的一些更改。
Hibernate ORM 5.2 功能
Hibernate ORM 5.2 使用 Java 8 JDK 构建,在运行时需要 Java 8 JRE。下表列出了本版本中所做的一些更改:
-
hibernate-java8模块合并到hibernate-core中,Java 8 日期/时间数据类型现在受到原生支持。 -
hibernate-entitymanager模块已合并到hibernate-core中。HibernateEntityManager和HibernateEntityManagerFactory已被弃用。 -
对
Session、无状态Session和SessionFactory类层次结构进行了重构,以删除已弃用的类,并更好地与 JPA Metamodel API 保持一致。 -
org.
hibernate.persister 和 org.hibernate.tuple软件包中的 SPI 已改变。任何使用这些 SPI 的自定义类都需要审核和更新。 -
LimitHandler更改引入了一个新的hibernate.legacy_limit_handler设置,默认设置为false,旨在允许您启用旧的 Hibernate 4.3 限制处理程序行为。这会影响有限的方言列表。 -
引进了检索数据库表的新策略,提高了
SchemaMigrator和SchemaValidator的性能。 -
此发行版本更改了使用 PostgreSQL81Dialect 及其子类时注释了
@Lob的String、字符[]和 Character[]属性的CLOB值。 -
@TableGenerator和@SequenceGenerator名称的范围已从全局更改为 local。
有关 Hibernate 5.2 中实施的完整更改列表,请参阅 Hibernate ORM 5.2 迁移指南。
Hibernate ORM 5.3 功能
Hibernate ORM 5.3 添加了对 JPA 2.2 规范的支持。这个版本包含与这个规范相符的更改以及其他改进。下表列出了其中一些更改:
更改位置查询参数处理会导致以下更改:
- 在 HQL/JPQL 查询中移除对 JDBC 样式参数声明的支持.
- JPA 位置参数的行为与指定参数更为相似。
-
本地查询中的 JDBC 样式参数声明使用基于一个参数而非零参数绑定来与 JPA 保持一致。您可以通过将
hibernate.query.sql.jdbc_style_params_base属性设置为true 来恢复到基于零的绑定。
-
为遵循 JPA 规范,由
@TableGenerator存储的值存储的序列值是最近生成的值。在以前的版本中,Hibernate 存储下一个序列值。您可以使用hibernate.id.generator.stored_last_used属性来启用传统的 Hibernate 行为。使用@TableGenerator并迁移到 Hibernate 5.3 的现有应用必须将hibernate.id.generator.stored_last_used 配置属性设置为false。 -
org.hibernate.query.QueryParameter类中的getType()方法被重命名为 getHibernateType()。 - Hibernate 的第二级缓存 SPI 已重新设计,以更好地满足各种缓存提供商的要求。详情可在 HHH-11356 中找到。
- HHH-11356 的更改还需要消费者更改,这会影响 Hibernate 统计系统。
-
某些方法临时添加到
org.hibernate.Query类中,以便更轻松地将原生应用从 Hibernate ORM 5.1 迁移到 5.3,并维护 Hibernate 5.1 分页行为。这些方法已被弃用,并且可以随 Hibernate 的未来版本一起移植,应用应更新为使用 JPA 方法。 -
将 Infinispan 用作 Hibernate 2nd 缓存提供程序的支持已移到 Infinispan 项目。因此,
hibernate-infinispan模块已被丢弃。 -
org.hibernate.tool.enhance.EnhancementTaskAnt 任务的 API 已更改。addFileset()方法已被丢弃,而是使用setBase()和setDir()方法。详情可在 HHH-11795 中找到。 - Hibernate 4.3 中引入的错误导致可嵌入集合元素和复合 ID 的多对一关联被预先获取,即使显式映射为 lazy。在 Hibernate 5.3.2 中,这个问题已被修复。因此,这些关联会根据映射的指定获取。详情可在 HHH-12687 中找到。
-
此发行版本中统一了 JPA 和 Hibernate 事件监听程序的本地实施。因此,
JpaIntegrator类已经过时。扩展org.hibernate.jpa.event.JpaIntegrator的类必须修改,必须更改这些类来实施org.hibernate.integrator.spi.Integrator接口。详情可在 HHH-11264 中找到。 -
org.hibernate.persister软件包中的 SPI 已改变。任何使用这些 SPI 的自定义类都需要审核和更新。
有关这些更改以及 Hibernate 5.3 中实施的其他更改的完整列表,请参阅 Hibernate ORM 5.3 迁移指南。
5.8.5.1. Hibernate 5.1 和 Hibernate 5.3 之间的异常处理变化. 复制链接链接已复制到粘贴板!
在 Hibernate 5.2 和 5.3 中,用于使用 Hibernate 的本地引导、打包或转换 HibernateException 构建的 SessionFactory 的异常处理。此行为的唯一例外是在操作特定于 Hibernate 时,如 Session.save() 或 Session.saveOrUpdate()。
在 Hibernate 5.3.3 中,添加了 hibernate.native_exception_handling_51_ compliance 属性。此属性指示使用 Hibernate 的原生 bootstrapping 构建的 SessionFactory 的异常处理是否应与 Hibernate ORM 5.1 中的原生异常处理行为相同。如果设置为 true,则HibernateException 不会按照 JPA 规范包装或转换。对于使用 JPA bootstrapping 构建的 SessionFactory,此设置将被忽略。