我的要求:
如果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;
我更喜欢不使用自定义查询,即使用findBy或Spring CRUD支持的其他方法/接口。
答案 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 reference或line 182 of org.springframework.data.repository.query.parser.Part。
也可以在Spring's Jira page创建功能请求。
答案 2 :(得分:5)
您还可以使用 findFirst 来获取第一个结果。在获得结果之前,请确保使用 Orderby ,然后使用升序( Asc )或降序( Desc )。例如,如果您想按版本排序并根据productName检索
RetainInfo findFirstByProductNameOrderByVersionDesc(String productName);