小编典典

Hibernate Criteria API-如何按集合大小排序?

hibernate

假设我有类User和UserGroup。有一个与用户关联的可选的1-many组,并且该关联是从双方映射的(UserGroup端通过一个名为“
members”的属性,它是一个HashSet,而User端则通过属性“ group”)。

使用Criteria API,如何查询所有组,并按组成员计数排序?

(编辑)当我问到这是在SQL中执行分页时,我应该指出来,因此,如果可能,也应该在SQL中执行排序。


阅读 229

收藏
2020-06-20

共1个答案

小编典典

另一个选择是使用@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中重新创建-这对我有帮助。

希望这可以帮助

2020-06-20