获取一对多关系中父级的最大记录
本文关键字:记录 一对多 关系 获取 | 更新日期: 2023-09-27 18:00:24
假设有两个类,一个是ParentClass,另一个是ChildClass。父母有一个包要孩子
我试过了。SetResultTransformer(新的DistinctRootEntityResultTransformer)和distinct(),用于过滤重复和获取时。SetMaxResults()我在ParentClass级别没有得到它。
有什么可以用来制作的吗。SetMaxResults()在ParentClass级别上工作,而不是在ChildClass上工作。我需要在Parent级别强制执行maxresults。
当我在查询中寻找更多的5条ParentClass记录时,具有6个子项和setmaxresults(6)和distinct()的示例ParentClass将导致我得到一个ParentClass。我的标准包括3个与父记录匹配的参数和2个与子记录匹配的参数
一种解决方案可以是使用子查询。文件14.11。子查询。
它将像内部选择一样工作。子查询将包含WHERE子句,该子句具有2个匹配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>();