9

我在 Spring Repo 中有这样的内容:

findTop10ItemsByCategIdInOrderByInsertDateDesc(List ids)

我想要按插入日期排序的 id 列表中类别 id 的前 10 个项目。

另一个类似的查询:

findTop10ItemsByDomainIdAndCategIdInOrderByInsertDateDesc(List ids, @Param Integer domainId)

在这里,我希望域 id 等于给定的参数,并且 categId 在给定的列表中。

我设法使用@Query 解决了它,但我想知道上述查询是否有一个衬里。

谢谢

编辑 顶部工作正常。最初我有findTop10ItemsByDomainIdAndCategIdOrderByInsertDateDesc. 现在我想要来自类别 ID 列表的结果。这就是新的要求。

第二次编辑 我的查询适用于查找域 id 等于给定参数且类别 id 包含在给定列表中的结果集。但是我发现 HQL 不支持 setMaxResult 之类的东西作为顶部或限制。

@Query("select i from Items i where i.domainId = :domainId and i.categId in :categoryIds order by i.insertDate desc")

这个方法的参数是,(@Param("domainid") Integer domainid,List<Integer> categoryIds)但它接缝我被允许对每个参数使用@Param 注释或根本不使用@Param(Pageable 返回除外;不是我的情况)

我仍然不知道如何实现这个想法:提取前 n 个元素,其中字段 a eq 到参数,字段 b 在参数集中,由另一个字段排序。

ps:抱歉标签,但没有 spring-crudrepository :)

4

1 回答 1

9

解决您的问题的方法是:

List<MyClass> findTop10ByDomainIdAndCategIdInOrderByInsertDateDesc(Long domainId, List<Long> ids);
  1. Top10将结果限制为前 10 个。

  2. ByDomainId将结果限制为已通过的结果domainId

  3. And添加另一个约束。

  4. CategIdIncategId将结果限制为已通过的那些条目List

  5. OrderByInsertDateDesc订单结果按插入日期降序排列,然后限制为TOP10.

我在以下示例中测试了此查询:

List<User> findTop10ByEmailAndPropInOrderByIdDesc(String email, List<Long> props);

在哪里User

private Long id;
private String username;
private String password;
private String email;
private Long prop;

目前我建议使用LocalDateLocalDateTime使用 Spring Data JPA 存储日期。

于 2017-09-28T17:42:48.487 回答