假设有两个类,一个是ParentClass,一个是ChildClass。父母正在准备一个袋子来生孩子。
我已经尝试过.SetResultTransformer(新的DistinctRootEntityResultTransformer())和distinct(),它们可以过滤掉重复的内容,并且在获取.SetMaxResults()时,我无法获得ParentClass级别的内容。
有什么可以用来使.SetMaxResults()在ParentClass级别而不是在ChildClass上工作的方法吗?我需要在父级强制执行最大结果。
当我在查询中查找5个以上的ParentClass记录时,具有6个ParentClass和setmaxresults(6)和distinct()的示例ParentClass会导致我得到一个childs。我的条件包括3个参数与父记录匹配,2个参数与子记录匹配
发布于 2013-02-21 17:18:55
一种解决方案是使用子查询。文档14.11. Subqueries。
它将像一个内部select一样工作。子查询将包含带有2个参数的WHERE子句以匹配Child,以及一个用于返回Parent.ID的投影。然后,主查询将包含3个参数来过滤Parent,还包含一个调用子查询以匹配Parent ID。
子查询:
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主查询:
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>();https://stackoverflow.com/questions/14994877
复制相似问题