Quarkus 上的 Hibernate ORM 7:每个新版本都带来更好的数据库体验

Quarkus 上的 Hibernate ORM 7:每个新版本都带来更好的数据库体验

简介

Hibernate ORM 的发展速度非常快,其与 Quarkus 的集成也是如此,因为出色的数据库访问是 Quarkus 体验的关键组成部分。最新的 Quarkus 3.24 版本将 Hibernate 升级到 7.0 版本,这是一个重大的升级,意味着一些破坏性的更改,因此在升级时需要注意 迁移指南。Hibernate 和 Quarkus 的开发人员一直在合作,所以这里快速浏览一下过去几个月发生的事情以及 Quarkus 用户未来可以期待什么。

许可证和治理更新

Quarkus 和 Hibernate 现在都是 Commonhaus 基金会的项目,这是一个致力于为开源库创建协作环境的非营利组织。自升级到 Hibernate 7 以来,Quarkus 和所有 Hibernate 库现在共享相同的开源许可证:Apache 许可证 2.0 版本。

Hibernate ORM 7.0 更新

新版本的 Hibernate 带来了更好的性能和 各种新功能,其中一些功能改善了开发人员体验,例如使用 findMultiple() 和 getMultiple() 来高效地批量获取实体。

对 Jakarta Data 的支持

Jakarta Data 是一种更简单的编写数据访问应用程序的方法,自 2024 年 11 月以来一直在 Quarkus 中得到支持。我们建议您尝试一下,因为它能够非常快速轻松地实现 DAO/存储库模式,没有任何样板代码,并且是类型安全的。要开始使用,只需包含 jakarta.data:jakarta.data-api 依赖项以及最新版本的 Quarkus,即。

jakarta.data

jakarta.data-api

以下是如何编写简单存储库的示例

@Repository

public interface Library {

@Find

Optional byIsbn(String isbn);

@Query("""

select b.isbn, b.title, listagg(a.name, ' & ')

from Book b join b.authors a

group by b

order by b.isbn

""")

List

summarize();

}

这个主题值得深入探讨,如果您有兴趣,请告诉我们,我们可以提供更多内容。

在此期间,您可以随时参考 专门的 Quarkus 指南 快速入门,并参考 Hibernate ORM 中相应的文档 以获得更高级的用法。

新的 Restrictions API

在旧的 Hibernate Criteria API 被弃用后,开发人员仍然怀念它的简洁性,因此 Hibernate 团队引入了一个新的 Restrictions API,它甚至具有新功能,例如可以进一步限制已编写的 JPQL/HQL 查询。

List books =

SelectionSpecification.create(Book.class,

"""

from Book where discontinued = false

""")

.restrict(Restriction.startsWith(Book_.title, "hibernate"))

.sort(Order.desc(Book_.title))

.createQuery(session)

.setPage(Page.first(50))

.getResultList();

此功能也可与 Hibernate Data Repositories(Jakarta Data API 的 Hibernate 实现)一起使用,并创建一个允许过滤而无需编写任何 JPQL/HQL 代码的存储库。

@Find

List books(Restriction restriction,

Order order);

当用户调用该方法时,他们可以传递 Restriction 对象来过滤所需的书籍。

var books =

library.books(Restriction.contains(Book_.title, "Hibernate"),

Order.of(_Book.title.ascIgnoreCase(),

_Book.isbn.asc()));

Hibernate Reactive 与 Hibernate ORM 一起使用

一项备受期待的功能是能够在同一个 Quarkus 应用程序中 混合使用 Hibernate ORM 和 Hibernate Reactive 扩展。没有这项功能,要让这两个扩展共存需要一些现在不再需要的变通方法:自 Quarkus 3.24 起,现在可以混合使用这两个扩展。

Hibernate Reactive 是一个强大的响应式数据访问抽象,但其优势因项目而异。我们不强制规定用法,而是让用户能够轻松地试验 Hibernate ORM 和 Reactive。使用 Hibernate ORM 的项目可以添加 Reactive 扩展,重用映射实体创建响应式资源,运行测试和基准测试,并确定它是否适合其特定需求和可伸缩性目标。在使用两者时,更容易为不同的用例选择最适合的方法。另一个好处是,它使得在必要时更容易分小步从一个迁移到另一个。

Panache 用户也将从 Panache 2.0 开始拥有此可能性。

注入 SchemaManager

Hibernate Schema Manager 是一个强大的工具,可以从 Java 对象生成 DDL 脚本。现在可以通过依赖注入在 Quarkus 中使用其功能。这在 编写测试 时特别有用,可以让您以编程方式控制何时执行模式导出、模式验证、数据清理和模式清理。

未来

团队对这些重要项目的未来有很多计划:Quarkus 的 DevUI 将得到增强,改善开发人员体验,并有可能 执行任意 HQL 查询 来尝试语法和实验测试数据,以及 即时生成迁移脚本。

我们还在致力于改进 Hibernate Reactive 扩展,提供对 命名数据源和命名持久化单元 的支持。

此外,为了提供更好的用户体验,Quarkus 和 Hibernate 团队一直在持续合作进行性能和效率改进。例如,一项 避免需要 IdentityHashMap 来跟踪持久化实体 的优化,在运行一个简单的 100-1000 个不可变实体查询时,将性能提高了 8%,而在处理持久化集合时甚至更高。而这只是众多改进中的一项,也并非最后一项:未来预计会有更大的性能改进。

看看新版本,让我们知道您的想法!

相关推荐

有人说自己是麂皮控,但居然连“麂”字都不会念...
微信的开发者团队是什么
今日之时365天第二季

微信的开发者团队是什么

📅 07-16 👁️ 783
nike毒蜂顶级和次级有什么区别?耐克毒蜂顶级次级对比
今日之时365天第二季

nike毒蜂顶级和次级有什么区别?耐克毒蜂顶级次级对比

📅 07-06 👁️ 4146
《魔兽世界》怀旧服冬泉谷魂精介绍
今日之时365天第二季

《魔兽世界》怀旧服冬泉谷魂精介绍

📅 07-12 👁️ 8533
如何在Steam上手动安装DLC:完整指南和常见问题解决
瑞典欲解“14年之痒” 德国需防瑞典边路和角球战术
今日之时365天第二季

瑞典欲解“14年之痒” 德国需防瑞典边路和角球战术

📅 08-02 👁️ 243