我们非常高兴地宣布发布 Hibernate ORM 6.0 Alpha5。
6.0 的主要设计目标是进一步提高 Hibernate 的吞吐性能。高负载性能测试表明,Hibernate 通过从 ResultSet
中按名称读取值的方法是其扩展吞吐量时最限制性的因素。最基本的,6.0 主要是将旧的按名称读取策略改为按位置读取。但这个简单的目标有很多后续影响。
我们已经取得了很大的进步,但仍然处于 Alpha 版,因此还有很多工作要做。
映射
我们在映射模型的各个方面继续开发对新按位置读取范式的支持。Alpha5 特别增加了对以下内容的支持:
-
@Version
-
@EmbeddedId
-
组合外键
-
FetchMode#SELECT
用于一对一关联 -
多态集合
-
数组
-
排序 Map
-
有序 Map
-
排序 Set
-
有序 Set
-
@SortNatural
/@SortComparator
用于排序 Set 和 Map -
引号列名
-
实体图
-
抓取配置文件
-
过滤器
-
@Where
/@WhereJoinTable
-
数据库导出、更新等
改进的基本值映射
从 Hibernate 视角来看,基本值可以分为以下几部分:
-
一个
SqlTypeDescriptor
-
一个
JavaTypeDescriptor
-
一个
BasicValueConverter
-
一个
MutabilityPlan
Alpha5 增加了使用注解轻松自定义这些部分的能力,以控制哪些 SqlTypeDescriptor
、JavaTypeDescriptor
等将被使用。
我们已经开始了一个关于这一内容的文档章节,尽管它还很年轻
HQL 改进
-
支持
rollup
和cube
分组操作符 -
支持
(not) exists
谓词 -
支持比较操作符右侧的
any / some
和every / all
限定符 -
支持选择子句中的子查询
-
支持插入值 HQL 查询
-
支持插入选择 HQL 查询
-
支持更新 HQL 查询
方言改进
历史以来,Hibernate 将其方言定义为静态信息 - 意味着每个数据库 + 版本组合都需要作为一个独立的方言类来处理。我们一直希望使方言更加灵活,并决定 6.0 是实现这一目标的正确时机。
方言 SQL 影响
方言现在对 Hibernate 生成的 SQL 进行了更好的控制,以优化数据库的翻译级别
-
Dialect#getHqlTranslator
-HqlTranslator
控制将 HQL 语句翻译为其自身的语义查询模型(SQM)树(AST)。SQM AST 也是 Hibernate 用来表示 JPA 判定树的 -
Dialect#getSqmTranslatorFactory
-SqmTranslatorFactory
是用于将 SQM AST 翻译成 Hibernate 的 SQL AST 的特定SqmTranslator
实例的工厂 -
Dialect#getSqlAstTranslatorFactory
-SqlAstTranslatorFactory
是用于将 SQL AST 翻译成“可执行”的JdbcOperation
的特定SqlAstTranslator
实例的工厂
方言有机会影响这三个翻译,尽管大多数方言实现将专注于 Dialect#getSqlAstTranslatorFactory
,如果有的话。
SQM 函数
与 HQL 和 Criteria 中的函数相关的 SPI 已稳定,尽管仍被视为孵化中。这些 SPI 允许将自定义函数功能添加到 HQL 和 Criteria。请参阅
-
org.hibernate.query.sqm.function.SqmFunctionRegistry
-
org.hibernate.query.sqm.function.SqmFunctionDescriptor
更多信息
要取得联系,请使用https://hibernate.com.cn/community/上讨论的常规渠道