当前位置: 首页 > 面试题库 >

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

柴瀚
2023-03-14
问题内容

假设我有类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中重新创建-这对我有帮助。

希望这可以帮助



 类似资料:
  • 问题内容: 我在Redis商店中使用type。我为每个用户创建一个自己的 KEY 并将数据放在此处: KEY 示例 : 我想从Redis中为用户键选择数据:1、2、3,并按得分(时间戳)进行排序。 如果只是简单地看问题,我需要跨时从任何KEY中选择一个数据,然后将按分数排序的所有结果组合在一起。 问题答案: 有两种方法可以执行此操作,但是正确的方法取决于您要执行的操作。例如: 您可以在代码中为每个

  • scard key 如果set是空或者key不存在返回0

  • 问题内容: 我将MongoDB与Node.JS结合使用。我有一个包含日期和其他行的集合。日期是一个JavaScript 对象。 如何按日期排序此收藏集? 问题答案: 只需对@JohnnyHK答案进行一些修改 在许多用例中,我们希望返回最新记录(例如最新更新/插入)。

  • 问题内容: 我有一个这样的: 我想根据列表值的大小按升序对地图进行排序。我怎样才能做到这一点? 在这种情况下,我希望订购加拿大,印度,美国的钥匙。 问题答案: 没有可保证的迭代顺序,因此您需要收集到一个才能使排序有意义。 之所以引发,是因为合并器功能仅用于并行流],而我们并未使用。 如果您觉得可读性更好,也可以使用: