7.8. Hibernate 更改


JBoss EAP 8 包括对 Hibernate ORM 6.2 的支持,这是 Java 编程语言的对象关系映射工具。有关 Hibernate ORM 6.2 文档的更多信息,请参阅 Hibernate ORM 6.2

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

  • 要从 JBoss EAP 7.4 迁移到 JBoss EAP 8,您必须完成以下步骤。

    • 从 Hibernate ORM 5.3 迁移到 5.4
    • 从 Hibernate ORM 5.4 迁移到 5.5
    • 从 Hibernate ORM 5.5 迁移到 5.6
    • 从 Hibernate ORM 5.6 迁移到 6.0
    • 从 Hibernate ORM 6.0 迁移到 6.1
    • 从 Hibernate ORM 6.1 迁移到 6.2
    • Hibernate ORM dialects
    • 弃用的 Hibernate ORM 类
    • 推出 Hibernate ORM 类
    • Hibernate ORM 内部
  • 要从 JBoss EAP 和 Hibernate 的旧版本迁移,您必须完成以下步骤。

    • 从 Hibernate ORM 4.3 迁移到 Hibernate ORM 5.0
    • 从 Hibernate ORM 5.0 迁移到 Hibernate ORM 5.1
    • 从 Hibernate ORM 5.1 和 Hibernate ORM 5.2 迁移到 Hibernate ORM 5.3

7.8.1. 从 Hibernate ORM 5.3 迁移到 5.4

本节重点介绍从 Hibernate ORM 版本 5.3 迁移到 5.4 时所需的更改。有关 Hibernate ORM 5.3 和 Hibernate ORM 5.4 之间实施的更改的更多信息,请参阅 Hibernate ORM 5.4 迁移指南

已知的更改

下面描述了从 Hibernate ORM 版本 5.3 迁移到 5.4 时的一些变化。

7.8.1.1. 覆盖延迟身份管理行为

  • 在 Hibernate 5.3 中,为基于 FlushModeFlushModeType 值的 DelayedPostInsertIdentifier 行为提供支持,以缩短增强 扩展 PersistenceContext 支持。不幸的是,此更改中包含了一些问题。
  • 在 Hibernate 5.4 中,它决定保留尽可能多的 Hibernate 5.3 行为,并且只为所选用例恢复非常具体的 DelayedPostInsertIdentifier 行为。
  • 为了让 Hibernate 5.4 更灵活,需要将配置选项用作完全禁用 Hibernate 5.3 行为的临时解决方案,将其还原回 Hibernate 5.2 及更早版本。

由于修复 HHH-12973,您必须将 JDBC 驱动程序版本升级到 6.1.2。因此,在没有关闭数据库连接的情况下,SQL Server JDBC 驱动程序的旧版本无法内省 INFORMATION_SCHEMA.SEQUENCES

7.8.2. 从 Hibernate ORM 5.4 迁移到 5.5

本节重点介绍从 Hibernate ORM 版本 5.4 迁移到 5.5 时所需的更改。有关 Hibernate ORM 5.4 和 Hibernate ORM 5.5 之间实施的更改的更多信息,请参阅 Hibernate ORM 5.5 迁移指南

已知的更改

Hibernate ORM 5.5 版本与 Hibernate ORM 5.4 类似,因为它包括应用到 5.4 维护版本的所有 bug 修复,并引入对 Jakarta Persistence API 的支持。

7.8.2.1. 基于 Dom4J 的 XML 映射

Hibernate 的 XML 映射定义的实施基于 JAXB 而不是 DOM4J 进行重组,以确保删除此依赖的持续进度。

7.8.2.2. 删除了禁用 "enhanced 代理" 的功能

"增强型代理"功能已作为 Hibernate 5.3 的可选性能改进功能。此功能现已永久启用。

7.8.3. 从 Hibernate ORM 5.5 迁移到 5.6

本节重点介绍从 Hibernate ORM 版本 5.5 迁移到 5.6 时所需的更改。有关 Hibernate ORM 5.5 和 Hibernate ORM 5.6 之间实施的更改的更多信息,请参阅 Hibernate ORM 5.6 迁移指南

已弃用的功能

Hibernate 5.6 版本与之前的 Hibernate 5.5 版本非常相似,但从之前的 Hibernate 版本中删除一些已弃用的功能除外。

7.8.3.1. 删除 Javassist

您无法选择 javassist 作为用于实体字节代码增强的实施。byte Buddy 是默认值,在一段时间后,javassist 已被弃用,现在被删除。这对应用程序没有任何功能影响;唯一的例外是,它不再可用于配置 hibernate.bytecode.provider=javassist 属性。如果您使用这个 feautre,可以删除此属性。这可能导致 Hibenate ORM 不再在其依赖项中列出 javassist 的问题。

7.8.4. 从 Hibernate ORM 5.6 迁移到 6.0

本节重点介绍从 Hibernate ORM 版本 5.6 迁移到 6.0 时所需的更改。有关 Hibernate ORM 5.6 和 Hibernate ORM 6.0 之间实施的更改的更多信息,请参阅 Hibernate ORM 6.0 迁移指南

Hibernate 6.0 发行版本包括以下更改:

  • Java 11 是 Hibernate 6.0 的最低兼容基准版本。
  • Jakarta Persistence:Hibernate ORM 6.0 发行版中的另一项重要更改包括从 Java Persistence (如 Java EE specs 定义)移到 Jakarta Persistence,如 Jakarta EE spec 定义。此更改产生的最重要的影响包括使用 Jakarata Persistence 类 jakarta.persistence prerequisites 而不是 Java Persistence ones javax.persistence prerequisites
  • 从 JDBC 读取: Hibernate ORM 6.0 版本开发的另一个原因是从 JDBC ResultSet 中按名称(read-by-name)读取结果的另一方面,以根据位置(读取)读取结果。进行了此更改,通过实施吞吐量测试来提高扩展。
  • 生成的 SQL:此功能会导致以下改进:

    • 不再生成列别名
    • 列引用是"unique-d"。
    • 更好地定义并更好地确定不必要的加入(次要表、继承表)
  • 标识符为 Object - 早期版本的 Hibernate 需要所有标识符类型都实现 Serializable,Hibernate 6.0 已被删除,因为标识符可以是任何 对象。这个更改会影响之前使用 Serializable 定义的许多 API 和 SPI 方法。
  • @IdGeneratorType:在这个发行版本中,您可以使用 @IdGeneratorType 注释来获得更好的 type-safe 方法来定义标识符生成的自定义生成器。
  • 隐式标识符序列和表名称 :在 Hibernate 6.0 中修改了与标识符生成关联的序列和表的隐式名称,这可能会影响用户迁移应用程序。在本发行版本中,Hibernate 会为每个实体层次结构创建一个序列,而不是默认单个序列 hibernate_sequence
  • 隐式序列生成器的默认值:Implicit 序列,如前面 hibernate_sequence,现在遵循 JPA @SequenceGenerator 注释的默认值,这意味着序列的分配大小为 50。
  • 类型 system: 因为 Hibernate 6.0 是一个主要版本,另一个重要的改变是修改 Hibernate 的映射注解,并使它们更适合类型安全。这个功能已决定在此发行版本中提供,因为与类型相关的合同已更改。
  • query:在 Query 的功能中引入了很多更改。查询功能,如迁移到专用树结构以模型 HQL 和标准查询,改进了批量 SQM DML 语句(如 insert、update 和 delete)的实现,以及更改 hibernate.criteria.copy_tree 属性的行为,并包括了传递令牌。
  • #onSave 方法的签名更改:AonSave 方法的签名已从保存 (Object 实体, Serializable id, Object[] state, String[] propertyNames, String[] type) 改为 boolean onSave (Object entity, Object id, Object[] state, String[] propertyNames, Type[] type),将预期标识符类型从 Serializ 改为 Object
  • 获取循环确定:以前的 Hibernate 版本确定使用深度优先方法获取,偶尔会导致奇数的"循环"确定。从 Hibernate 6.0 开始,现在首先使用宽度首先获取确定。
  • 重组 org.hibernate.loader: loader.collection 软件包的内容被重构为 loader.ast.spiloader.ast.internal,并适应 SQM API。
  • 重组 SQL 软件包: sql.ordering 的内容被移到 metamodel.mapping.ordering.ast
  • hbm.xml 映射的弃用: Legacy hbm.xml 映射格式已弃用,并将不再支持 6.x。
  • lazy 关联广告:在 Hibernate 6.0 之前,使用 fetch="join" 或 @Fetch (FetchMode.JOIN) 的 lazy 关联 在通过 id i.e 加载时被视为 eager。从 Hibernate 6.0 开始,无论获取机制如何,这些关联都被正确遵守。通过指定 lazy="false" 或 @ManyToOne (fetch = EAGER)/@OneToOne (fetch = EAGER)/@OneToMany (fetch = EAGER)/@ManyToMany (fetch = EAGER)来实现向后兼容
  • 对于 hbm.xml <return-join/&gt; 的行为变化:根据 Hibernate 6.0,&lt ;return-join /> 会导致获取关联,而不是添加选择项目。

有关这些功能的更多信息,请参阅 Hibernate ORM 6.0 迁移指南

Hibernate 6.0 发行版本还包含从以前的 Hibernate 版本中删除的许多功能,如下所示:

  • 现在不允许使用 hbm.xml 多个 < column /> - 在 6.0 中删除了对带有多个列的基本属性映射的支持。组件类属性现在支持正确解释 CompositeUserType 类。
  • 传统 Hibernate 标准 API - Hibernate 6.0 中已被弃用的传统 Hibernate 标准 API 已在 Hibernate 6.0 中删除。
  • 通过 NativeQuery 的调用 - 使用 NativeQuery 调用 SQL 功能和程序不再被支持。使用 org.hibernate.procedure.ProcedureCalljakarta.persistence.StoredProcedureQuery 等方法。
  • HQL 获取所有 properties 子句 - 获取所有 properties 子句已从 HQL 语言中删除。
  • JMX 集成 - Hibernate 不再为将其与 JMX 环境集成提供内置支持。
  • JACC 集成 - Hibernate 不再为将其与 JACC 环境集成提供内置支持。

有关 Hibernate 6.0 中删除的功能的更多信息,请参阅 Hibernate ORM 6.0 迁移指南

7.8.5. 从 Hibernate ORM 6.0 迁移到 6.1

本节重点介绍从 Hibernate ORM 版本 6.0 迁移到 6.1 所需的更改。有关 Hibernate ORM 6.0 和 Hibernate ORM 6.1 间实施的更改的更多信息,请参阅 Hibernate ORM 6.1 迁移指南

Hibernate 6.1 发行版本包含以下更改:

  • 基本数组:除 byte[]/Byte[]char[]/Character[] 以外的基本数组,基本集合(仅子类型集合)映射到类型代码 SqlTypes.ARRAY,它映射到由新方法 getArrayTypeName 决定的 SQL 标准数组类型,并支持 org.hibernate.dialect.Dialect.Dialect。
  • Enum 映射更改:现在默认映射到类型代码 SqlType.SMALLINT,就像它映射到 TINYINT 之前。这个映射不正确,因为 Java 有效地允许 32K 枚举条目,但 TINYINT 只是一个 1 字节类型。

有关 Hibernate 6.1 中包含的功能的详细信息,请参阅 Hibernate ORM 6.1 迁移指南

7.8.6. 从 Hibernate ORM 6.1 迁移到 6.2

本节重点介绍从 Hibernate ORM 版本 6.1 迁移到 6.2 所需的更改。有关 Hibernate ORM 6.1 和 Hibernate ORM 6.2 之间实现的更改的更多信息,请参阅 Hibernate ORM 6.2 迁移指南

Hibernate 6.2 发行版本包含以下改进,如下所示:

DDL 类型更改:

  • OffsetTime 映射更改 - 在此发行版本中,OffsetTime 依赖于 @TimeZoneStoragehibernate.timezone.default_storage 设置。由于默认设置为 TimeZoneStorageType.DEFAULT,这意味着此类列的 DDL 期望已更改。
  • MariaDB 上的 UUID 映射更改 - 在 MariaDB 上,类型代码 SqlTypes.UUID 默认引用 DDL 类型 uuid,与使用 binary (16) 的位置相比。由于这个变化,在现有数据库中可能会出现模式验证错误。
  • SQL Server - On SQL Server 上的 UUID 映射更改,类型代码 SqlTypes.UUID 默认指的是 DDL 类型 唯一identifier,与使用 二进制(16) 的位置相比。由于这个变化,在现有数据库中可能会出现模式验证错误。
  • 与使用 clob 之前相比,Oracle 12.1+ 上的 JSON 映射更改,类型代码 SqlTypes.JSON 默认指的是 DDL 类型 blob 和 21+ 到 json。由于这个变化,在现有数据库中可能会出现模式验证错误。
  • H2 上的 JSON 映射更改 - On H2 1.4.200+,类型代码 SqlTypes.JSON 默认引用 DDL 类型 JSON,与使用 clob 的位置相比。由于这个变化,在现有数据库中可能会出现模式验证错误。
  • enums 的 datatype - 从 Hibernate 6.2 开始,选择隐式 SQL datatype 以存储枚举类上定义的条目数量敏感。
  • timezone 和 offset 存储 - hibernate.timezone.default_storage 现在默认为 DEFAULT
  • byte[]/Character[] 映射更改 - Hibernate 6.2 使其可配置,以处理域模型中的 Byte[]Character[] 映射更改的映射。
  • 用于可选一对一映射的 UNIQUE 约束 - Hibernate 的 Earlier 版本没有在数据库中为标记为可选 的逻辑一对一关联创建一个 UNIQUE 约束。从 Hibernate 6.2 开始,这些 UNIQUE 约束现已创建。
  • Oracle 上的原生 SQL 查询的列类型(n,0) - Since Hibernate 6.0,根据精度,在 Oracle 上带有 scale 0 的列 type ,tinyint,smallint , int, 或 bigint现在,根据精度,带有 scale 0 的类型为 number 的列被解释为 intbigint
  • 删除了对旧数据库版本的支持 - Hibernate 6.2 引入了对 Hibernate 支持的大多数数据库版本的最低支持数据库版本的概念。
  • CDI 处理的更改 - 当 CDI 可用并配置了 CDI 时,Hibernate 可以使用 CDI BeanManager 解析各种 Bean 引用。从 Hibernate 6.2 开始,只有在 hibernate.cdi.extensions 设为 true 时,这些扩展才会从 CDI BeanManager 解析。
  • 更改默认和弃用 - enableLazyInitializationenableDirtyTracking 增强工具选项、全局属性 hibernate.bytecode.use_reflection_optimizer 以及相应的 hibernate.enhancer.enableLazyInitializationhibernate.enhancer.enableDirtyTracking 配置设置,将其默认值切换到 true,这些设置现已弃用。
  • org.hibernate.cfgorg.hibernate.loader 的软件包更新: org.hibernate.cfgorg.hibernate.loader 软件包已更新,以明确显示被视为 API、SPI 和内部的合同之间的区别。
  • 集成合同(SPI)的变化 - 在 Hibernate ORM 6.2 的开发过程中,以下 SPIs 已被修改: EntityPersister#lock,EntityPersister#multiLoad,Executable#afterDeserialize, 和 JdbcType#getJdbcRecommendedJavaTypeMapping ()
  • 查询路径比较 :根据 Hibernate 6.2,在早期检查的路径比较。
  • batch Fetching 和 LockMode - 当 LockMode 大于 READ 时,Hibernate 不会执行批处理获取,因此不会初始化现有的未初始化代理。这是因为锁定模式与批处理获取队列中的一个代理不同。

7.8.7. 从 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 中删除:

对类和软件包的其他更改
类型处理
事务管理
其他 Hibernate ORM 5 更改
  • cfg.xml 文件再次被完全解析,并与事件、安全和其他功能集成。
  • 使用 EntityManagerFactorycfg.xml 加载的属性没有之前使用 hibernate 的前缀名称。现在,已保持一致。
  • 配置不再是连续的。
  • org.hibernate.dialect.Dialect.getQuerySequencesString () 方法现在检索目录、模式和递增值。
  • AuditConfiguration 修饰符已从 org.hibernate.envers.boot.internal.EnversService 中删除。
  • AuditStrategy 方法参数被修改为删除过时的 AuditConfiguration,并使用新的 EnversService
  • org.hibernate.hql.spi 软件包和子软件包中的各种类和接口已移到新的 org.hibernate.hql.spi.id 软件包中。这包括 MultiTableBulkIdStrategy 类和 AbstractTableBasedBulkIdHandlerTableBasedDeleteHandlerImplTableBasedUpdateHandlerImpl 接口及其子类。
  • 对属性访问合同进行完全重新设计。
  • 现在,使用 org.hibernate.cache.spi.access.cache.spi.access.AccessType .getExternalName ()方法而不是 org.hibernate.cache.spi.access.AccessType enum constants 来定义有效的 hibernate.cache.default_cache_concurrency_strategy 设置值。这与其他 Hibernate 设置一致。

7.8.8. 从 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[]) 调用来确定每个 javax.persistence.Entity 是否具有映射的数据库表。这是默认策略,它使用 hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=grouped 属性设置。此策略可能要求提供 hibernate.default_schema 和/或 hibernate.default_catalog

要使用执行 java.sql.DatabaseMetaData#getTables (String, String, String[]) 调用 的每个 javax.persistence.Entity 的旧策略,请使用 hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=indivivi 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 性能。
  • 此发行版本更改了 String字符[] 和 Character[] 属性的 CLOB 值,在使用 PostgreSQL81Dialect 及其子类时,会如何处理 @Lob
  • @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 分页行为。这些方法已弃用,要使用休眠版本来可移植,应该更新应用程序以使用 Jakarta Persistence 方法。
  • 对将 Infinispan 用作 Hibernate 第二级缓存提供程序的支持已移到 Infinispan 项目中。因此,hibernate-infinispan 模块已被丢弃。
  • org.hibernate.tool.enhance.EnhancementTask Ant 任务的 API 已更改。使用 setBase ()setDir () 方法丢弃了 addFileset () 方法。详情可在 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>
    Copy to Clipboard Toggle word wrap

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat