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/
更多信息
要联系,请使用在https://hibernate.com.cn/community/上讨论的常规渠道。