首页 > 解决方案 > Spring data JPA Specification - 返回列表并限制结果属性在列表中仅出现一次

问题描述

我正在尝试构建一个规范,该规范将 Set UUID fooIds 和 long oldThanInMillis 作为输入。

我的方法应该返回一个结果列表。结果有一个 fooId 作为字段(不是 id)。在表中,可能有许多具有相同 fooId 的对象。但是我希望每个 fooId 只获得 1 个结果。

我当前的规范如下所示:

private Specification<Result> buildSpec(Set<UUID> fooIds, long olderThanMilis)
   {
       Specification<Result> idSpec = (root, query, builder) -> builder.or(builder.in(root.get("fooId")).value(clientPoses));
       Specification<Result> olderThanSpec = (root, query, builder) -> builder.lessThanOrEqualTo(root.get("created"), olderThanMilis);

       return idSpec.and(olderThanSpec);
   } 

我正试图在我拥有的东西之上打包一些东西,但似乎没有任何效果。可能的解决方法当然是不要从数据库加载一个列表,而是每个 fooId 和 oldThanMillis 一个一个地加载它,限制为 1 ......如果一个一个地加载它,这是一个不好的做法吗?请问有什么建议吗?谢谢...

标签: javaspringhibernatejpa

解决方案


通常,这是通过按独特的排序和 using 来处理的setMaxResults(1),但我不知道 Spring Data 如何支持这一点。


推荐阅读