gpt4 book ai didi

NHibernate ManyToMany 和急切加载 : strange resultset for SetFetchmode combined with SetResultTransformer and SetMaxResult

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

我有一个多对多的关系,我试图获取渴望的关系:

*.CreateCriteria(typeof(Class1))
.SetFetchMode("Class2", FetchMode.Eager)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.SetFirstResult(20)
.SetMaxResult(10)
.List<Class1>();

我想要返回第 20-30 行,但我只返回了第 12-18 行。为什么?因为SetResultTransformer是在SetMaxResult之后执行的。它返回从第 20 行开始的 10 行,但随后它被区分(这是一个单词吗?),结果是第 12-18 行。我完全理解发生了什么,但无法使用标准想出解决方案......

有人有办法解决吗?

最佳答案

这是因为 SetMaxResults 方法在“低级别”工作。我的意思是,SetMaxResults 会导致 NHibernate 生成的 SQL 语句包含 TOPLIMIT 子句。

当然,当您使用急切获取模式时,这会导致奇怪的结果,因为急切获取模式会导致 JOIN。

因此,如果您有 2 个以一对多关系连接在一起的表,则 NHibernate 返回的记录集如下所示

1 recordA-fromTable1  1 recordX-fromTable2
2 recordA-fromTable1 2 recordY-fromTable2
3 recordB-fromTable1 3 record2-fromTable2

如果对上述记录集执行“TOP 2”,NHibernate 将只能从中提取一个实体,因为结果集中的前 2 条记录实际上是同一实体。

我通过使用包含 TOP 子句的分 ionic 查询解决了这个问题,并检索必须检索的实体的 ID。

关于NHibernate ManyToMany 和急切加载 : strange resultset for SetFetchmode combined with SetResultTransformer and SetMaxResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553063/

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