我们很高兴宣布6.0 Alpha3版本的发布。

6.0版本的主要设计目标是进一步提高Hibernate的吞吐性能。高负载性能测试表明,Hibernate通过从ResultSet按名称读取值的方式是其扩展吞吐性能的最限制因素。最基本的,6.0版本就是从旧的按名称读取策略改为按位置读取。但这个简单的目标有很多后续影响。

我们已经取得了很大的进步,但仍然是一个Alpha版本,所以还有很多事情要做。

类型系统

Alpha3在处理一些类型系统变更以支持集成用例(尤其是Quarkus)方面进行了重大调整。具体来说,Quarkus希望能够在没有SessionFactory可用的情况下,执行HQL查询翻译的第一阶段,将其转换为语义查询AST(语义查询模型 - SQM)。

为了实现这一点,SQM树基于Hibernate对JPA领域元模型的扩展(如javax.persistence.metamodel.EntityType等),这比Hibernate完整的运行时"映射模型"更容易构建。

我们还引入了一个新的容器来存储JPA元模型对象:org.hibernate.metamodel.model.domain.JpaMetamodel

这带来了许多非常有益的结果,将在接下来的几个部分中讨论。

SQM作为Criteria

首先,这个SQM不仅是翻译HQL/JPQL查询的结果,也是Hibernate对JPA Criteria树的实现。这很有益,因为以前Hibernate会将Criteria转换为HQL,并将HQL转换为其传统的HQL转换树(一个非常"笨拙"的转换)。

这意味着Criteria树可以直接转换为SQL AST,从而在Criteria查询执行中提供更好的性能。

减少对SessionFactory的依赖

如前所述,Alpha3的主要变化之一是取消了执行HQL转换时需要SessionFactory的需求。这一变化也被扩展到了许多不需要SessionFactory的合约中。这使得这些组件更容易被集成所重用。

这将是在剩余的6.0 Alpha周期中持续进行的工作。到目前为止,已经调整了QueryEngine。还有几个其他计划。

支持UPDATE/DELETE HQL/Criteria查询

支持使用SQM → SQL AST执行这些变异查询,包括多表实体变体

更多信息

请参阅用户指南迁移指南

还可以查看发布页面

要取得联系,请使用在https://hibernate.com.cn/community/上讨论的常规渠道。


返回顶部