Spring存储库:尽管更改了参数,但返回相同的结果列表

我有一个具有以下功能的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”的结果集完全相同! 我在日志文件中注意到,正确的值将在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);
MYLIFEA 回答:Spring存储库:尽管更改了参数,但返回相同的结果列表

您已经打印了执行的查询吗?
我认为该值未传递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作为参考。

本文链接:https://www.f2er.com/2678688.html

大家都在问