Hibernate 6.6.0.Alpha1

发布者:    |       Hibernate ORM 发布

Jakarta Data

Hibernate 6.6 包含了当前 Jakarta Data 1.0 Release Candidate 的完整实现。正如此处所述,我们的实现

  • 基于编译时代码生成,通过注解处理器实现前所未有的编译时类型安全,并且

  • 由 Hibernate 的 StatelessSession 支持,该 Session 已特别增强以满足 Jakarta Data 的需求。

此实现已通过 Jakarta Data TCK,并且我们有一个待认证的请求。

要使用 Hibernate 数据仓库,您需要依赖

  • 我们的注解处理器 hibernate-jpamodelgen

  • Jakarta Data API,`jakarta.data-api。

例如,在 Gradle

implementation 'jakarta.data:jakarta.data-api:1.0.0-RC1'
implementation 'org.hibernate.orm:hibernate-core:6.6.0.Alpha1'

annotationProcessor 'org.hibernate.orm:hibernate-jpamodelgen:6.6.0.Alpha1'

有关更多信息,请参阅全新的 Hibernate 数据仓库 文档

@ConcreteProxy

6.6 还提供了一个新的 @ConcreteProxy 注解,旨在作为已弃用的 @Proxy@LazyToOne 注解的改进替代品。表示应将延迟引用实例化为具体类型,而不是引用类型。

考虑以下模型和数据

@ConcreteProxy
@Entity
@Inheritance
class Payment { ... }

@Entity
class CardPayment extends Payment { ... }

session1.persist( new CardPayment( 1, ... ) );

作为一个简单的例子 -

Payment loaded = session2.getReference( Payment.class, 1 );

历史上,Hibernate 会为 loaded 类型的 Payment 创建一个延迟代理。将此引用转换为 CardPayment 会引发转换错误。@ConcreteProxy 强制 Hibernate 解决实际的具体类型,并创建该类型的代理 -

CardPayment loaded = (CardPayment) session2.getReference( Payment.class, 1 );
Hibernate 将尝试多种不同的方式来确定具体类型,但最终可能不得不回退到击中数据库,这可能会影响性能。

此功能与 Hibernate 的基于代理的旧延迟和新的字节码增强延迟一起工作。


返回顶部