Spring Boot中如何获取MySQL里同一产品的最新平均评分数据?
解决方案
首先,findTopByProduct默认按实体主键升序查询,所以会拿到最早创建的旧数据(4.00);而findBottomByProduct并非Spring Data JPA的内置查询方法,自然无法使用。要获取最新的average_stars,可以参考以下几种方案:
自定义带排序的查询方法
在你的Repository接口中添加指定排序规则的查询方法,优先按记录的创建/更新时间降序(如果实体有这类字段),或者按自增ID降序(适用于ID递增生成的场景),示例代码如下:// 按创建时间降序取最新一条(推荐,时间字段能精准反映记录新旧) Score findTopByProductOrderByCreatedAtDesc(Product product); // 无时间字段时,按ID降序获取(依赖ID自增规则) Score findTopByProductOrderByIdDesc(Product product);调用该方法即可直接拿到最新的评分记录,从中提取4.50的
average_stars。用@Query自定义JPQL查询
如果需要更灵活的逻辑,可直接编写JPQL语句手动指定排序和条数限制:@Query("SELECT s FROM Score s WHERE s.product = :product ORDER BY s.createdAt DESC LIMIT 1") Score getLatestScoreByProduct(@Param("product") Product product);额外注意
建议给实体类添加createdAt或updatedAt字段来标识记录时序,这是数据管理的通用做法;若无法添加时间字段,再考虑用ID排序,但这种方式依赖ID生成规则,可靠性略低。
内容的提问来源于stack exchange,提问作者Ben Chu
相关产品推荐
相关产品推荐

