spring crud repository按字段C按列表顺序按字段A和字段B查找前n项

时间:2015-09-02 11:33:17

标签: spring spring-data-jpa spring-repositories

我在Spring Repo中有这样的事情:

findTop10ItemsByCategIdInOrderByInsertDateDesc(List ids)

我希望前10个项目的类别ID在按插入日期排序的ID列表中。

另一个类似的查询:

findTop10ItemsByDomainIdAndCategIdInOrderByInsertDateDesc(List ids, @Param Integer domainId)

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

我设法使用@Query解决它,但我想知道上面的查询是否有一个内容。

感谢

修改 顶部工作正常。最初我有findTop10ItemsByDomainIdAndCategIdOrderByInsertDateDesc。现在我想要一个类别ID列表的结果。这是新要求。

第二次编辑 我的查询适用于查找结果,其中domain id等于给定的param,而categories 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返回;不是我的情况)< / p>

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

ps:对不起标签,但没有spring-crudrepository:)

1 个答案:

答案 0 :(得分:2)

解决问题的方法是:

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

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

  3. And添加了另一个约束。

  4. CategIdIn将结果限制为已通过categIdList的条目。

  5. OrderByInsertDateDesc订单结果按插入日期降序,然后限制为TOP10
  6. 我已在以下示例中测试了此查询:

    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存储日期。