Mysql Hibernate查询缓存错误

Mysql Hibernate查询缓存错误,mysql,hibernate,rest,spring-security,spring-boot,Mysql,Hibernate,Rest,Spring Security,Spring Boot,下面的查询在我的AuthorizedVoter中,在我访问API之前首先被触发。这将返回1个结果 " from School s inner join fetch s.student ss where s.Key = :schoolKey and " + "s.accountKey = :accountKey and ss.Key= :studentKey " + "and ss.country='INDIA'" API触发下面的查询,该查询的

下面的查询在我的AuthorizedVoter中,在我访问API之前首先被触发。这将返回1个结果

    " from School s inner join fetch s.student ss where s.Key = :schoolKey and      " +
        "s.accountKey = :accountKey and ss.Key= :studentKey " +
        "and ss.country='INDIA'"
API触发下面的查询,该查询的结果也是1行

SELECT DISTINCT
s.key, ss.studentkey
FROM
school s
    INNER JOIN
student ss ON s.key = ss.reportingsessionkey
    AND (ss.country='INDIA')
WHERE
session0_.key = ?
如果退出缓存,则返回4行,这是实际的正确值。 我没有使用任何二级缓存,这似乎是一级缓存问题。 请帮助我找到一个比在API中删除缓存更好的修复方法。实际原因又是什么呢?

当我作为集成测试的一部分一个接一个地运行这两个查询时,可以添加更多内容。 第一个查询是Spring安全性的一部分,第二个查询是API的一部分,之后会被调用,看起来学生的详细信息以某种方式存储在持久性上下文中,并继续在API中使用


请在gihub上找到代码的链接

您是否有一级缓存的其他配置?如果在默认情况下使用Hibernate,这就是一种额外的行为。没有针对一级缓存的特定配置,只有默认设置。使用github链接更新了帖子。请检查您的github项目上没有db属性,也没有初始化脚本。没有数据库,所以当我请求
http://localhost:8080/api/one?oneKey=1
我得到一个空指针。如果你想在更远的地方讨论它,我创造了一个新的问题:我确实看过了。相当外向的行为。我认为,当您从一个控制器调用访问两个repo方法时,Spring为您管理一个事务,这就是Hibernate一级缓存的作用,并为这两个方法提供相同的结果。如果将两个调用拆分为两个控制器方法,您将看到问题不会发生,即使从同一个测试方法调用它们也是如此。如何解决?我不知道,我曾尝试使用带有事务性注释的服务,但似乎也有相同的问题。您是否有针对一级缓存的其他配置?如果在默认情况下使用Hibernate,这就是一种额外的行为。没有针对一级缓存的特定配置,只有默认设置。使用github链接更新了帖子。请检查您的github项目上没有db属性,也没有初始化脚本。没有数据库,所以当我请求
http://localhost:8080/api/one?oneKey=1
我得到一个空指针。如果你想在更远的地方讨论它,我创造了一个新的问题:我确实看过了。相当外向的行为。我认为,当您从一个控制器调用访问两个repo方法时,Spring为您管理一个事务,这就是Hibernate一级缓存的作用,并为这两个方法提供相同的结果。如果将两个调用拆分为两个控制器方法,您将看到问题不会发生,即使从同一个测试方法调用它们也是如此。如何解决?我不知道,我曾尝试使用带有事务注释的服务,但似乎也有同样的问题。