我们很高兴宣布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
。还有几个其他计划。