【问题标题】:Spring Repository: Returns same result list despite changing parameterSpring Repository:尽管更改了参数,但返回相同的结果列表
【发布时间】:2020-01-31 09:48:48
【问题描述】:

我有一个 SpringBoot 服务,功能如下:

public class RankingService
{
    public List<RankingDto> getIncrementralChanges(Double now, Double before)
    {
         List<RankingDto> rankingNow = createRanking(now);
         List<RankingDto> rankingBefore = createRanking(before);

         return getChanges(rankingNow, rankingBefore);
    }

    private List<RankingDto> createRanking(Double time)
    {
        return this.rankingRepo.findByTime(time)
             .stream()
             .map(e -> modelMapper.map(e, RankingDto.class))
             .collect(Collectors.toList());
    }

    private List<RankingDto> getChanges(List<RankingDto> l1, List<RankingDto> l2)
    {
        ...
    }
}

但我的问题如下:

“rankingNow”和“rankingBefore”的ResultSet完全一样! 我在日志文件中注意到,正确的值将绑定在 sql 查询中,所以我不知道为什么结果集是相同的。

如果我手动调用数据库中的两个查询,我会看到两个结果集中的差异。

在我看来,即使在日志文件中显示了缓存或其他任何东西,这两个查询都确实被调用了。

如果我调用存储库的一些本机函数,例如findById(10) 和 findById(11),结果集不同,但我的自定义查询没有。

这里是查询:

@Query(value = "SELECT r FROM Ranking JOIN r.team t JOIN t.starter s WHERE totalTime <= ?1")
@EntityGraph(attributePath = {"team", "team.starters"})
List<Ranking> findByTime(Double time);

【问题讨论】:

    标签: java spring-boot spring-cache spring-repositories


    【解决方案1】:

    您是否已经打印了执行的查询?
    在我看来,它没有传递time 的正确值。


    要使用@Query 进行自定义查询,您应该按位置或按名称引用参数,如下所示(注意方法参数的索引从1开始):

    @Query(value = "SELECT r FROM Ranking JOIN r.team t JOIN t.starter s WHERE totalTime <= ?1")
    List<Ranking> findByTime(Double time);
    

    或按名称:

     @Query(value = "SELECT r FROM Ranking JOIN r.team t JOIN t.starter s WHERE totalTime <= :time")
    List<Ranking> findByTime(Double time);
    

    请参阅this article on Baeldung 作为参考。

    【讨论】:

    • 这是一个错字。我已经编辑了这个问题。我在日志文件中看到传递的值在这两种情况下都是正确的。
    • 你能在问题中添加查询吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2018-11-12
    • 2016-11-18
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多