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 中。HibernateEntityManagerHibernateEntityManagerFactory 已被弃用。
  • Session无状态SessionSessionFactory 类层次结构进行了重构,以删除已弃用的类,并更好地与 JPA Metamodel API 保持一致。
  • org. hibernate.persister 和 org .hibernate.tuple 软件包中的 SPI 已改变。任何使用这些 SPI 的自定义类都需要审核和更新。
  • LimitHandler 更改引入了一个新的 hibernate.legacy_limit_handler 设置,默认设置为 false,旨在允许您启用旧的 Hibernate 4.3 限制处理程序行为。这会影响有限的方言列表。
  • 引进了检索数据库表的新策略,提高了 SchemaMigratorSchemaValidator 的性能。
  • 此发行版本更改了使用 PostgreSQL81Dialect 及其子类时注释了 @LobString字符[] 和 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.EnhancementTask Ant 任务的 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 迁移指南

在 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,此设置将被忽略。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部