gpt4 book ai didi

NHibernate:如何在数据库的单次往返中执行多个子孙(对象图)的急切子选择获取?

转载 作者:行者123 更新时间:2023-12-02 11:27:25 25 4
gpt4 key购买 nike

首先,请不要试图阻止我进行急切加载 - 遍历对象图并导致(通过延迟加载)甚至多次往返数据库并不是一种选择。

我有一个大对象图。我想获取根对象,加上其子对象、孙子对象、曾孙对象等的子集。目前,我通过创建多个 Future 对象(使用条件)来实现此目的在每一个中,我都会执行 SetFetchMode("...", FetchMode.Eager) - 请参阅 Ayende's postSam's 3rd comment here 。有两个问题:

  1. NHibernate 在同一个往返中执行多个选择查询 - 从根到叶子的每条路径 (A.B.C.D),这很好,但使用 join 而不是 subselect 这是我真正想要它做的。使用 join 意味着需要从数据库发送大量数据,需要解析,并且 nhibernate 需要做很多不必要的工作。

  2. 由于问题 1 - 在某些情况下嵌套超过一层的对象重复。

我通过将集合设置为 Set“解决”了第二个问题,但随后我失去了排序能力 - 因为我必须指定 ISet 作为接口(interface),所以我的代码无法知道如果该集合确实是一个 OrderedSet

有谁知道如何在单次往返中执行急切加载一个对象以及多个深度嵌套集合,但不使用 join ?

我将不胜感激!我在网上寻找答案,显然我不是第一个碰壁的人。

最佳答案

您只需调用 1 次 SetFetchMode 即可创建单独的查询,并使用 MultiCriteria(或 Futures 或您想要使用的任何内容)一次性运行它们。之后,只有第一个查询的结果与您相关。这将在一次往返中为您提供一个结果。

关于NHibernate:如何在数据库的单次往返中执行多个子孙(对象图)的急切子选择获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com