Chr*_*ler 7 java mysql spring hibernate jpa
我们在 spring 应用程序的两个不同服务中有两个服务方法,它们都用@Transactional(isolation = Isolation.SERIALIZABLE). 这两种方法从我们的数据库读取和写入数据,并使用相同的实体。所有查询都是通过 spring 数据存储库完成的。
这两种方法也有@PreAuthorize(@customPermissionEvaluator.evaluate(...))调用自定义方法的注释。在权限评估器中,我们也通过 spring 数据存储库访问数据库以读取数据。权限评估器方法本身没有任何事务注释。
当@Transactional(isolation = Isolation.SERIALIZABLE)同时调用两个服务方法时,这种模式给我们带来了问题。如果发生这种情况,我们很快就会遇到幻读的数据一致性问题(两种服务方法对相同的实体进行操作)。然而,一旦我们从这两种方法中删除 @PreAuthorize 注释,我们就会得到正确的事务处理。似乎@PreAuthorize 中加载的实体可能会被休眠缓存,并且当我们在服务方法中再次查询它们时,它们不会刷新。
下面我们正在运行一个 mysql 数据库。
有没有人知道这里发生了什么,或者之前有没有人在春天遇到过类似的问题?从自定义 @PreAuthorize 方法访问数据库是否有任何规则/限制?在这一点上我们真的很迷茫……谢谢!