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

本文关键字:记录 一对多 关系 获取 | 更新日期: 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>();