我们非常高兴地宣布发布 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 增加了使用注解轻松自定义这些部分的能力,以控制哪些 SqlTypeDescriptorJavaTypeDescriptor 等将被使用。

我们已经开始了一个关于这一内容的文档章节,尽管它还很年轻

HQL 改进

  • 支持 rollupcube 分组操作符

  • 支持 (not) exists 谓词

  • 支持比较操作符右侧的 any / someevery / all 限定符

  • 支持选择子句中的子查询

  • 支持插入值 HQL 查询

  • 支持插入选择 HQL 查询

  • 支持更新 HQL 查询

方言改进

历史以来,Hibernate 将其方言定义为静态信息 - 意味着每个数据库 + 版本组合都需要作为一个独立的方言类来处理。我们一直希望使方言更加灵活,并决定 6.0 是实现这一目标的正确时机。

方言初始化

方言现在使用有关底层数据库的信息进行初始化,包括版本。确切的信息由 DialectResolutionInfo 定义,它非常类似于 JDBC 的 DatabaseMetaData

方言 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

更多信息

请参阅用户指南迁移指南

还可以查看发布页面。加入 BinTray 并关注发布存储库以接收发布通知

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


返回顶部