我在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:)
答案 0 :(得分:2)
解决问题的方法是:
List<MyClass> findTop10ByDomainIdAndCategIdInOrderByInsertDateDesc(Long domainId, List<Long> ids);
Top10
将结果限制在前10位。
ByDomainId
将结果限制为已通过domainId
的人。
And
添加了另一个约束。
CategIdIn
将结果限制为已通过categId
中List
的条目。
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;
目前我建议使用LocalDate
或LocalDateTime
使用Spring Data JPA存储日期。