我们非常高兴地宣布发布 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/上讨论的常规渠道