假设我有类User和UserGroup。有一个与用户关联的可选的1-many组,并且该关联是从双方映射的(UserGroup端通过一个名为“ members”的属性,它是一个HashSet,而User端则通过属性“ group”)。
使用Criteria API,如何查询所有组,并按组成员计数排序?
(编辑)当我问到这是在SQL中执行分页时,我应该指出来,因此,如果可能,也应该在SQL中执行排序。
另一个选择是使用@Formula批注,该批注基本上等效于创建嵌套的select,以便您轻松掌握。
在相关的DB对象属性/成员(应创建)上,将注释添加到getter中,如下所示:
@Formula(“(从表的SELECT COUNT(TABLE_NAME.ID)中选择任何内容…)”)public long getNewProperty {return newProperty; }
然后直接定位成员以掌握您的计数值…
注意:请注意,在公式批注中指定sql时,在引用当前对象表(this)时必须直接指定字段名称,因为hibernate会处理此本身。因此,在您的WHERE子句中,引用我怀疑是UserGroup的当前对象表时,只需单独使用ID即可。
我必须为我的新属性设置一个setter,以使hibernate正常工作并防止编译器发出抱怨。
可能还有其他使用@Formula的聪明方法,但是我对此还很陌生,关于这个主题的文档似乎也很少。
如果您以前从未使用过嵌套的SELECTS,那么最好先在sql中重新创建-这对我有帮助。
希望这可以帮助