假设数据库中有以下条目:
标识身份PartLastModifiedDatate1Entity1Part128.12.20202 Entity2Part128.12.20203 Entity3Part228.12.20204 Entity1Part130.12.20205 Entity3Part231.12.2020
现在,如果我想使用spring数据来查找具有较新lastmodifieddata字段的条目,我可以通过定义以下方法来找到它
findFirstByEntityIdAndEntityPartOrderByLastModifiedDateTimeDesc(String entityId, String entityPart)
是否有任何方法可以返回所有条目的列表,其中只包含具有较新lastmodifieddate的条目,因此在我们的示例中,它应该返回仅包含ID为2、4、5的条目的列表,对于这些条目,它们具有较新的lastmodifieddate。
Edit1作为解决方案,我使用了如下sql查询,还定义了分页修复
@Query(value = "SELECT * FROM orders AS or WHERE LAST_MODIFIED_DATE =\n" +
" (SELECT MAX(LAST_MODIFIED_DATE)\n" +
" FROM orders \n" +
" WHERE (ENTITY_ID = or.ENTITY_ID AND ENTITY_PART = or.ENTITY_PART))"
countQuery = "SELECT COUNT(*) FROM (\n" +
" SELECT MAX(LAST_MODIFIED_DATE) as or\n" +
" FROM orders \n" +
" GROUP BY ENTITY_ID , ENTITY_PART) AS order")
nativeQuery = true)
2条答案
按热度按时间e0bqpujr1#
在这种情况下
After
应使用以下关键字:(我保持与您示例中相同的顺序)
但是,这还不够。首先,您需要找到最后一个(使用您提供的查询),然后查询具有该值的实体。这不能通过一个存储库查询来完成,但可以通过定义
default
方法。请注意@Transactional
注解时,查询应在一个事务中运行,否则结果可能不一致。例子:
}
裁判:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-方法.查询创建
ar7v8xwq2#
因为您使用的是没有时间的日期,所以条目上有重复日期的危险。若您可以修改数据库,只需将布尔值添加到其中以标识最新条目。然后,您可以使用list findbyboolean(boolean true);
你应该考虑使用时间的日期,以避免以后的并发症。