我试图限制 NHibernate Criteria 将返回的实体数量。标准似乎是使用 SetMaxResults,但如果我的标准涉及多对多关系的 LEFT OUTER JOIN,这将无法正常工作。
一个例子:
狗有主人(多对多关系),我需要检索最多 10 条属于某组主人的狗。正在做
session.CreateCriteria<Dog>()
.CreateAlias("Owners", "Owners")
.Add(Restrictions.In("Owners.Id", idCollection)
.SetMaxResults(10)
.List<Dog>();
将转换为 SQL 查询,例如
SELECT TOP(10) * FROM DOGS d
LEFT OUTER JOIN OWNERS_DOGS od ON d.id = od.id
WHERE od.OWNER_ID IN (:valueone, :valuetwo)
我的 TOP 限制发生得太早,导致拥有多个符合条件的狗的主人多次计入我的 10 限制。有没有一种干净的方法告诉 NHibernate 我只希望它为第一个 X 狗对象补水?我可能无法摆脱对数据库执行完整的 SELECT,但如果我可以避免加载系统中的每条狗,那就太好了,因为我只会显示其中的 10 条。