5.8.3. 迁移到 Hibernate ORM 5
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 中删除:
对类和软件包的其他更改
-
org.hibernate.integrator.spi.Integrator接口更改为考虑 bootstrap 重新设计。 -
创建了一个新的软件包
org.hibernate.engine.jdbc.env.spi。它包含org.hibernate.engine.jdbc.env.spi.JdbcEnvironment接口,该接口提取自org.hibernate.engine.jdbc.spi.JdbcServices接口。 -
引入了一个新的
org.hibernate.boot.model.relational.ExportableProducer接口,它将影响org.hibernate.id.PersistentIdentifierGenerator实施。 -
org.hibernate.id.Configurable的签名被更改为接受org.hibernate.service.ServiceRegistry,而不是仅仅org.hibernate.dialect.Dialect.Dialect.Dialect. -
org.hibernate.metamodel.spi.TypeContributor接口已迁移到org.hibernate.boot.model.TypeContributor。 -
org.hibernate.metamodel.spi.TypeContributions接口已迁移到org.hibernate.boot.model.TypeContributions。
类型处理
-
内置
org.hibernate.type.descriptor.sqlTypeDescriptor实施不再使用org.hibernate.type.descriptor.sqlTypeDescriptorRegistry自动注册。使用自定义SqlTypeDescriptor实现来扩展内置实施并依赖该行为的应用程序必须更新才能调用SqlTypeDescriptorRegistry.addDescriptor()本身。 -
对于以生成的 UUID 定义的 ID,一些数据库要求您显式设置
@Column(length=16),以生成BINARY(16),以便比较可以正常工作。 -
对于
hbm.xml中定义的EnumType映射,您想要javax.persistence.EnumType.STRINGname-mapping,则必须使用useNamed(true)设置或通过指定 VARCHAR 值12明确声明此配置。
事务管理
-
事务 SPI 在 Hibernate ORM 5 中进行了重大重新设计。在 Hibernate ORM 4.3 中,您使用
org.hibernate.TransactionAPI 直接访问不同的后端事务策略。Hibernate ORM 5 引入了一个间接层。在后端,org.hibernate.Transaction实施现在与org.hibernate.resource.transaction.TransactionCoordinator 声明,它代表了后端策略中给定会话的事务上下文。虽然这不会直接影响到开发人员,但可能会影响 bootstrap 配置。之前的应用程序会指定hibernate.transaction.factory_class属性,该属性现已已弃用,并引用org.hibernate.engine.transaction.spi.TransactionFactoryFQN(完全限定名称)。通过 Hibernate ORM 5,您可以指定hibernate.transaction.coordinator_class设置,并引用org.hibernate.resource.transaction.Transaction.TransactionCoordinatorBuilder。如需了解更多详细信息,请参阅org.hibernate.cfg.AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY。 以下短名称现在被识别:
-
JDBC : 使用 JDBC
java.sql.Connection 管理事务.这是非 JPA 事务的默认方法。 JTA :使用 JTA 管理事务.
重要如果 JPA 应用没有为
hibernate.transaction.coordinator_class属性提供设置,Hibernate 将根据持久化单元的事务类型自动构建正确的交易协调器。如果非 JPA 应用未为
hibernate.transaction.coordinator_class属性提供设置,Hibernate 将默认为 tojdbc来管理事务。如果应用实际使用了基于 JTA 的事务,此默认值将导致问题。使用基于 JTA 的交易的非 JPA 应用应将hibernate.transaction.coordinator_class属性值明确设置为jta,或提供自定义org.hibernate.resource.transaction.Transaction.TransactionCoordinatorBuilder,构建一个org.hibernate.resource.transaction.TransactionCoordinator,它可与基于 JTA 的交易正确协调。
-
JDBC : 使用 JDBC
其他 Hibernate ORM 5 更改
-
The
cfg.xml文件再次完全解析并与事件、安全性和其他功能集成。 -
使用
EntityManagerFactory从cfg.xml加载的属性之前没有带有hibernate的前缀名称。现在,它已实现一致性。 - 配置不再可序列化。
-
org.hibernate.dialect.Dialect.getQuerySequencesString()方法现在检索目录、架构和递增值。 -
AuditConfigurationmodifier 从org.hibernate.envers.boot.internal.EnversService中删除。 -
AuditStrategy方法参数被修改来删除过时的AuditConfiguration,并使用新的EnversService。 -
org.hibernate.hql.spi包和子包中的各种类和接口已移到新的org.hibernate.hql.spi.id包中。这包括MultiTableBulkIdStrategy类和AbstractTableBasedBulkIdHandler、TableBasedDeleteHandlerImpl和TableBasedUpdateHandlerImpl接口及其子类。 - 所有权访问合同完全重新设计。
-
现在,有效的
hibernate.cache.default_cache_concurrency_strategy设置值使用org.hibernate.cache.spi.access.AccessType.getExternalName()方法而不是org.hibernate.cache.spi.access.AccessTypeenum 常数来定义。这与其他 Hibernate 设置更加一致。