首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取一对多关系中父级的最大记录数

获取一对多关系中父级的最大记录数
EN

Stack Overflow用户
提问于 2013-02-21 13:01:22
回答 1查看 174关注 0票数 1

假设有两个类,一个是ParentClass,一个是ChildClass。父母正在准备一个袋子来生孩子。

我已经尝试过.SetResultTransformer(新的DistinctRootEntityResultTransformer())和distinct(),它们可以过滤掉重复的内容,并且在获取.SetMaxResults()时,我无法获得ParentClass级别的内容。

有什么可以用来使.SetMaxResults()在ParentClass级别而不是在ChildClass上工作的方法吗?我需要在父级强制执行最大结果。

当我在查询中查找5个以上的ParentClass记录时,具有6个ParentClass和setmaxresults(6)和distinct()的示例ParentClass会导致我得到一个childs。我的条件包括3个参数与父记录匹配,2个参数与子记录匹配

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-21 17:18:55

一种解决方案是使用子查询。文档14.11. Subqueries

它将像一个内部select一样工作。子查询将包含带有2个参数的WHERE子句以匹配Child,以及一个用于返回Parent.ID的投影。然后,主查询将包含3个参数来过滤Parent,还包含一个调用子查询以匹配Parent ID

子查询:

代码语言:javascript
复制
var sub = DetachedCriteria
 .For<Child>()
 .Add(Restrictions.In("FirsChildProperty", new int[] {1, 2 })) // WHERE
 .Add(Restrictions.... // Second
 .SetProjection(Projections.Property("Parent.ID")); // Parent ID as a SELECT clause

主查询:

代码语言:javascript
复制
var criteria = session.CreateCriteria<Parent>()
 .Add(Restrictions.In("FirsParentProperty", new int[] {1, 2 })) // WHERE
 .Add(Restrictions.... // the second
 .Add(Restrictions.... // the third
 // no filter to match children
 .Add(Subqueries.PropertyIn("ID", sub)); // Parent.ID in (select
 // now paging just over Parent table....
 .SetFirstResult(100) // skip some rows
 .SetMaxResults(20)   // take 20

var result = criteria.List<Parent>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14994877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档