7.8. Hibernate 更改


JBoss EAP 8.1 包含对 Hibernate ORM 6.6 的支持,这是一个用于 Java 编程语言的对象关系映射工具。有关 Hibernate ORM 6.6 文档的更多信息,请参阅 Hibernate ORM 6.6 文档。

从 JBoss EAP 8.0 迁移到 JBoss EAP 8.1 时,请参考 Hibernate ORM 版本的特定 Hibernate ORM 迁移文档。

7.8.1. 从 Hibernate ORM 6.2 迁移到 6.6

JBoss EAP 8.1 包括 Hibernate ORM 6.6。有关 Hibernate ORM 6.2 和 Hibernate ORM 6.6 之间实施的更改的更多信息,请参阅以下 Hibernate 迁移指南:

7.8.1.1. 删除了 Hibernate ORM 功能

以下 ORM 功能已从 Hibernate 中删除:

HQL 空字面比较
在早期版本的 Hibernate 中,可以使用 = 和 <>/ != 运算符将表达式与 null 字面进行比较。这种方法是计数器的,因为比较解析为 null 的参数或表达式将始终产生假。

从 Hibernate ORM 6.3 开始,HQL 中的特殊处理已被删除。没有可用于保持向后兼容性的方法。用户需要更新这些查询以使用 null,且不是 null predicate 语法。

如需更多信息,请参阅 HQL 空字面比较

Removed idGeneratorStrategyInterpreter
从 Hibernate ORM 6.0 开始,idGeneratorStrategyInterpreter 已被弃用,并从 Hibernate ORM 6.4 中删除,以简化 id 生成器内部。
生成的值
从 Hibernate ORM 6.5 开始,@GeneratedValue 注释被删除,将导致抛出异常 AnnotationException。用户需要从其应用中删除 @GeneratedValue 注释。

7.8.1.2. 删除了 Hibernate ORM 类

本节提供有关在将来的 Hibernate ORM 发行版本中可能会删除的 Hibernate ORM 类的附加信息。如需更多信息,请参阅 已弃用 Hibernate ORM 类

7.8.1.3. 禁用 Hibernate ORM 类

本节为仍在开发的 Hibernate ORM 类提供了其他信息,例如,在 Hibernate ORM 版本未来的主版本、次版本或微版本中可能会更改。如需更多信息,请参阅 增加 Hibernate ORM 类

7.8.2. 从 Hibernate ORM 5.3 迁移到 6.2

JBoss EAP 7.4 包括 Hibernate ORM 6.2。有关 Hibernate ORM 5.3 和 Hibernate ORM 6.2 之间实施的更改的更多信息,请参阅以下 Hibernate 迁移指南:

7.8.3. 从 Hibernate ORM 4.3 迁移到 Hibernate ORM 5.0

JBoss EAP 7.0 包括 Hibernate ORM 5.0。本节重点介绍从 Hibernate ORM 版本 4.3 迁移到版本 5 时所需的更改。有关 Hibernate ORM 4 和 Hibernate ORM 5 之间实施的更改的更多信息,请参阅 Hibernate ORM 5.0 迁移指南

类型处理
事务管理
其他 Hibernate ORM 5 更改

7.8.4. 从 Hibernate ORM 5.0 迁移到 Hibernate ORM 5.1

JBoss EAP 7.1 包括 Hibernate ORM 5.1。本节重点介绍从 Hibernate ORM 版本 5.0 迁移到版本 5.1 所需的区别和所需更改。

Hibernate ORM 5.1 功能
此 Hibernate 发行版本包括性能改进和程序错误修复。如需更多信息,请参阅 7.1.0 的 JBoss EAP 发行注记中的 Hibernate ORM 5.1 功能。有关在 Hibernate ORM 5.0 和 Hibernate ORM 5.1 之间实施的更改的更多信息,请参阅 Hibernate ORM 5.1 迁移指南
模式管理工具更改, JBoss EAP 7 中的模式管理工具更改

Hibernate ORM 5.1 中的模式管理工具更改侧重于以下区域:

  • 统一处理 hbm2ddl.auto 并支持 hibernate 的 Jakarta Persistence 模式-generation
  • 从 SPI 中删除 JDBC 顾虑,以促进 Hibernate OGM(一种为 NoSQL 数据存储提供 Jakarta Persistence 支持)的持久性引擎。

模式管理工具更改只是直接使用以下类的应用程序迁移问题:

  • org.hibernate.tool.hbm2ddl.SchemaExport
  • org.hibernate.tool.hbm2ddl.SchemaUpdate
  • org.hibernate.tool.hbm2ddl.SchemaValidator
  • org.hibernate.tool.schema.spi.SchemaManagementTool, 或其委派
JBoss EAP 7.1 中的模式管理工具更改
Hibernate ORM 5.1.10 包含在 JBoss EAP 7.1 中,引入了用于检索数据库表的策略,用于改进 SchemaMigratorSchemaValidator 性能。此策略执行单个 java.sql.DatabaseMetaData#getTables (String, String, String, String[]) 调用,以确定每个 javax.persistence.Entity 是否有映射的数据库表。这是默认策略,它使用 hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=grouped 属性设置。此策略可能要求提供 hibernate.default_schema 和/或 hibernate.default_catalog

要使用 为每个 javax.persistence.Entity 来执行 java.sql.DatabaseMetaData#getTables (String, String, String[]) 调用的旧策略,请使用 hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=indidu ally 属性设置。

JBoss EAP 7.4 包括 Hibernate ORM 5.3。本节重点介绍从 Hibernate ORM 5.1 迁移到 Hibernate ORM 5.2 时所需的一些更改,然后迁移到 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 已被弃用。
  • SessionStatelessSessionSessionFactory 类层次结构被重构为移除已弃用的类,并与 Jakarta Persistence Metamodel API 更好地保持一致。
  • org.hibernate.persisterorg.hibernate.tuple 软件包中的 SPIs 已更改。任何使用这些 SPI 的自定义类都需要检查和更新。
  • LimitHandler 更改引入了一个新的 hibernate.legacy_limit_handler 设置,默认设置为 false,它旨在允许您启用旧的 Hibernate 4.3 限制处理程序行为。这会影响有限问题列表。
  • 引入了一个新的检索数据库表的策略,改进了 SchemaMigratorSchemaValidator 性能。
  • 此发行版本更改了在使用 PostgreSQL81Dialect 及其子类时处理 String,character[] ,Character[] 属性的 CLOB 值的方式。
  • @TableGenerator@SequenceGenerator 名称的范围已从 global 改为 local。

有关 Hibernate 5.2 中实施的更改的完整列表,请参阅 Hibernate ORM 5.2 迁移指南

Hibernate ORM 5.3 功能

Hibernate ORM 5.3 添加了对 Jakarta Persistence 2.2 规范的支持。此发行版本包含遵循此规格的更改以及其他改进。以下是其中一些更改的列表:

  • 对位置查询参数处理的更改会导致以下更改:

    • 在 HQL/JPQL 查询中删除了对 JDBC 样式参数声明的支持。
    • Jakarta Persistence 位置位置参数的行为与命名参数更为相似。
    • 原生查询中的 JDBC 样式参数声明使用基于一的,而不是零参数绑定,以便与 Jakarta Persistence 保持一致。您可以通过将 hibernate.query.sql.jdbc_style_params_base 属性设置为 true 来恢复到基于零的绑定。
  • 为遵守 Jakarta Persistence 规格,由 @TableGener 存储的值存储的序列值是最后生成的值。在以前的版本中,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 Statistics 系统。
  • 有些方法被临时添加到 org.hibernate.Query 类中,以便更轻松地将原生应用程序从 Hibernate ORM 5.1 迁移到 5.3,并维护 Hibernate 5.1 分页行为。这些方法已弃用,在以后的 Hibernate 版本中可以移植,应该更新应用程序以使用 Jakarta Persistence 方法。
  • 对将 Infinispan 用作 Hibernate 第二级缓存提供程序的支持已移到 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 中找到。
  • 本发行版本中,Jakarta Persistence 和 Hibernate 事件监听器的原生实现。因此,JpaIntegrator 类已过时。扩展 org.hibernate.jpa.event.spi.JpaIntegrator 的类必须修改这些类来实现 org.hibernate.integrator.spi.Integrator 接口。可在 HHH-11264 中找到详细信息。
  • org.hibernate.persister 软件包中的 SPI 已更改。任何使用这些 SPI 的自定义类都需要检查和更新。

有关 Hibernate 5.3 中所实施的其他更改的完整列表,请参阅 Hibernate ORM 5.3 迁移指南

Hibernate 5.1 和 Hibernate 5.3 之间的异常处理变化
在 Hibernate 5.2 和 5.3 中,使用 Hibernate 的原生 Bootstrap 构建的 SessionFactory 异常处理,按照 Jakarta Persistence 规格嵌套或转换 HibernateException。唯一例外是操作特定于 Hibernate 时,如 Session.save ()Session.saveOrUpdate ()

在 Hibernate 5.3.3 中,添加了 hibernate.native_exception_handling_51_compliance 属性。此属性指示使用 Hibernate 的原生 bootstrap 构建的 SessionFactory 异常处理应该与 Hibernate ORM 5.1 中的原生异常处理相同。当设置为 true 时,会根据 Jakarta Persistence 规范,不会嵌套或转换HibernateException。对于使用 Jakarta Persistence bootstrapping 构建的 SessionFactory,会忽略此设置。

兼容性转换器
JBoss EAP 7.4 包括一个兼容性转换器,它解决了 Hibernate ORM 5.3 API 方法,它们不再与 Hibernate ORM 5.1 兼容。转换程序是一种临时措施,允许使用 Hibernate ORM 5.1 构建的应用程序在 JBoss EAP 7.4 中表现出与 Hibernate 5.3 相同的行为。这是一个临时解决方案,您应该将这些方法调用替换为推荐的 Jakarta Persistence 方法调用。

您可以使用以下方法之一启用转换器:

  • 您可以通过将 Hibernate51CompatibilityTransformer 系统属性设置为 true 来全局启用转换程序。
  • 您可以使用 jboss-deployment-structure.xml 文件在应用程序级别启用转换程序。

    <jboss-deployment-structure>
      <deployment>
        <transformers>
          <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/>
        </transformers>
      </deployment>
      <sub-deployment name="main.war">
        <transformers>
          <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/>
        </transformers>
      </sub-deployment>
    </jboss-deployment-structure>

下表列出了正在转换的 Hibernate 5.1 方法,并将其转换为 Hibernate 5.3 方法:

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部