为什么 Hibernate Reactive 中的延迟加载不能透明?

问题描述 投票:0回答:1

我正在阅读 Hibernate Reactive 的doc,我遇到了这样的说法:

另一方面,在 Hibernate Reactive 中,惰性关联获取是一个异步过程,它通过 CompletionStage(或 Uni)产生结果。 因此,惰性抓取是一个显式操作......

我可能缺乏一些知识,使我无法理解该陈述的含义。为什么延迟关联获取是一个异步过程,导致它不像标准 Hibernate 那样透明?这里的挑战或障碍是什么?

来自文档中的示例:

session.find(Author.class, author.id)
       .chain( author -> Mutiny.fetch(author.books) )
       .invoke( books -> ... ) 

为什么我们必须显式链接

fetch
方法来声明,在某些时候,应用程序可能需要从数据库加载书籍?标准 Hibernate 不需要它。

请尽量不要含糊回答。我想深入了解这个问题。

谢谢!

hibernate asynchronous reactive-programming hibernate-reactive
1个回答
0
投票

因为在 HR 中,每次与数据库的交互(包括延迟获取)都是异步的,因此每个此类操作都必须返回一个表示“未来”结果的特殊对象。

获取

author.books
的操作不能返回
Set<Book>
,因为那需要同步获取集合。相反,它必须返回
Uni<Set<Book>>
.

并且由于我们在域模型中没有

Uni<Set<Book>>
(我们不想用
Uni
污染域模型),我们使用
fetch()
方法将类型
Set<Book>
映射到
Uni<Set<Book>> 
.

© www.soinside.com 2019 - 2024. All rights reserved.