今天,我们发布了Hibernate ORM 6.1的新维护版本:6.1.6.Final。
新特性
本版本引入了一些改进、错误修复和一系列显著的性能改进。
改进
二级缓存
我们改进了当在二级缓存中找到引用时初始化实体的方式,避免了不必要的调用属性设置器方法(见HHH-15666)。
查询结果重复检查
我们改进了检查HQL查询结果重复的方法。这将减少ORM需要执行的内存在内存处理量(见HHH-15479)。
针对二级超类型缓存的缓解措施
如这篇博客文章中所述,在调查性能回归时,我们发现一些流行的中间件库,包括Hibernate ORM,其性能受到现有JDK问题JDK-8180450的限制。
OpenJDK团队承认了其严重性,并正在为Java 21开发修复程序;我们希望它也将被考虑回滚,但在此期间,我们一直在修补我们的代码,以限制其影响,而不必等待修复。
这些已经由Red Hat性能团队验证;随着我们的继续进行,最高优先级的问题已经得到解决,但我们仍将识别更多问题。Hibernate ORM 6.2预计将有一些更显著的改进,因为我们有一批不适合回滚到这个维护分支的修复。
错误修复
HQL查询和转换器
我们修复了一个影响应用了转换器的属性的查询的bug(参见HHH-15742)。感谢新加入Hibernate ORM团队的成员Marco Belladelli,他上周刚刚加入我们团队,已经非常高效了!
嵌入对象
此次版本修复了影响嵌入对象的几个bug
-
嵌入对象中的
@OneToOne(mappedBy = …)
会导致IllegalArgumentException
(参见HHH-15606) -
在批量获取嵌入对象的关联时抛出
ClassCastException
(参见HHH-15644) -
当选择一个具有比父对象更多字段的嵌入对象的实体时,会抛出
ArrayIndexOutOfBoundsException
(参见HHH-15658) -
当初始化包含具有与包含多对多关联的实体中的单对一关联的实体集合的嵌入对象时,会抛出
UnknownTableReferenceException
(参见HHH-15713) -
当启用批量获取时,如果一个嵌入对象有一个为null的关联,而其他所有属性都是null,则该嵌入对象被认为是null(参见HHH-15695)
-
在启用脏跟踪时加载包含null嵌入式属性的实体时抛出
NullPointerException
(参见HHH-15730)
您可以在这里找到本版本的完整更改列表。