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 的基于代理的旧延迟和新的字节码增强延迟一起工作。