Spring CRUD存储库:有没有findOneByMaxXYZColumn()?

时间:2014-04-02 03:51:24

标签: spring-data

我的要求:

如果VERSION列具有最大值,则从表RETAIN_INFO中获取一个对象(例如RetainInfo)

CRUD存储库是否支持接口方法,如

findOneByMaxRetVersionAndCountry("DEFAULT")

等效的db2 sql:

select RET_ID, max(ri.RET_VERSION) from RETAIN_INFO ri  where ri. COUNTRY='DEFAULT'  group by RET_ID  fetch first 1 rows only;
  • 此查询选择一个ID,但实际上我希望RetainInfo对象对应查询返回的SINGLE行。

我更喜欢不使用自定义查询,即使用findBy或Spring CRUD支持的其他方法/接口。

3 个答案:

答案 0 :(得分:36)

您可以将限制与排序(spring data reference:limit query results)结合使用。在CrudRepository接口中声明一个类似于以下的方法:

    RetainInfo findTopByCountryOrderByRetVersionDesc(String country);

答案 1 :(得分:8)

Spring Data不提供表达式来选择最大值。所有受支持的查询部分都可以在Spring 1.2.0.RELEASE文档中找到:Appendix A. Namespace referenceline 182 of org.springframework.data.repository.query.parser.Part

也可以在Spring's Jira page创建功能请求。

答案 2 :(得分:5)

您还可以使用 findFirst 来获取第一个结果。在获得结果之前,请确保使用 Orderby ,然后使用升序( Asc )或降序( Desc )。例如,如果您想按版本排序并根据productName检索

RetainInfo findFirstByProductNameOrderByVersionDesc(String productName);