Hibernate ORM 6.0 Alpha9版本已发布。

6.0版本的主要设计目标是进一步提高Hibernate的吞吐性能。高负载性能测试显示,Hibernate通过名称从ResultSet中读取值的做法是其扩展吞吐量时最限制性的因素。最基本的,6.0版本主要是从旧的按名称读取策略转变为按位置读取。但这个简单的目标有很多影响。

在Alpha9版本中,API开始真正稳定,这是很好的。

Alpha8和Alpha9版本中做了大量工作,专注于修复与所有更改相关的测试失败,并使完整的测试套件恢复运行。我们目前的失败率降至17%,尽管其中至少有一些失败将是简单的、尚未实现的小事。例如,我们最近修复了一些与支持非ID生成属性(如@CreationTimestamp)相关的错误,因为读取生成值的代码尚未转换为使用按位置读取。所以,长话短说,我们正在顺利地向全面测试覆盖前进。

大部分工作是简单地“任务”以集成按位置读取的更改,因此工作远远超出了Jira变更日志。这个Alpha9版本包括

  • [HHH-1615] - 在group by子句中支持实体别名

  • [HHH-14495] - 使用表名,而不是实体名,作为每个实体的隐式序列命名的基准

  • [HHH-14745] - 添加FunctionContributor合约

  • 支持(非ID)值生成+文档改进

  • 支持复合值查询参数

  • 支持锁处理

  • 支持通过数组索引语法访问索引集合元素

  • 在谓词上下文中支持布尔表达式,例如where contains(e.field, 'token')

  • 引入FILTER子句用于聚合函数

  • 修复了关联的hql中连接子类错误的连接类型

  • 修复了子类表的连接类型问题

  • 修复了null辨别符的sql渲染问题

  • 修复内部连接错误创建问题

  • 修复当存在多个具有给定标识符的行时抛出异常的问题

  • 修复SmqBagJoin、SqmSetJoin和SqmListJoin抛出NotYetImplementedException的问题

  • 修复集合批量加载问题

  • 修复多对多Order列使用错误表的问题

  • 修复当Entity有名为id的属性且该属性不是标识符时,AbstractEntityPersister#findSubpart返回错误的ModelPart的问题

  • 修复在加载对应实例时创建新实例的问题

  • 修复SelfRenderingSqmFunction的多值参数扩展问题

  • 修复ManyToOneType#isModified()导致不必要的更新执行问题

  • 修复java.sql.Date属性分配了错误的BasicType问题

  • 修复当事务不活动且连接处理模式不等于AFTER_STATEMENT时关闭连接的问题

  • 修复StatelessSession#uniqueResult()未清除临时PersistenceContext的问题

  • 修复ScrollableResultsImpl未初始化非懒加载集合的问题

hibernate-community-dialects组件

特别值得讨论的一个变化是将某些Dialect从主hibernate-core组件移至独立的hibernate-community-dialects组件。这些Dialect不是常规测试的,因此被移至这个新组件,以便在使用它们时设定合理的期望。

这遵循了关于Dialect被视为支持的含义的既定准则。所有支持Dialect都存在于hibernate-core组件中。添加新支持Dialect的过程基本上意味着有人负责设置CI运行并同意修复报告的任何问题。如果您想支持一个Dialect,请联系聊天hibernate-dev邮件列表。

Gradle Enterprise

我想对Gradle团队表示衷心的感谢,他们帮助Hibernate在Gradle Enterprise上设置托管,并为改进构建提供了大量帮助。特别是Nelson Osacky和Etienne Studer——没有你们,我们永远不会弄清楚所有这些问题。

我强烈推荐组织查看Gradle Enterprise提供的功能,以从构建中获得最高的生产力、性能和可重复性。有关详细信息,请参阅https://gradle.com/

更多信息

请参阅用户指南迁移指南

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

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


返回顶部