Hibernate Spring数据JPA:无法从另一个线程中找到插入的实体

Hibernate Spring数据JPA:无法从另一个线程中找到插入的实体,hibernate,jpa,kotlin,spring-data-jpa,pgpool,Hibernate,Jpa,Kotlin,Spring Data Jpa,Pgpool,我在主线程中插入一个实体,然后在另一个线程中,我尝试通过使用Spring JPA Repository的JPA查询读取该插入实体的字段modifiedAt 接口结算存款:JPA存款{ /** *获取结算的状态。 */ @查询从结算s中选择s.modifiedAt,其中s.id=:id 有趣的FindModifiedAtById:Long:Instant } /* ... */ val transactionTemplate=TransactionTemplatetransactionManage

我在主线程中插入一个实体,然后在另一个线程中,我尝试通过使用Spring JPA Repository的JPA查询读取该插入实体的字段modifiedAt

接口结算存款:JPA存款{ /** *获取结算的状态。 */ @查询从结算s中选择s.modifiedAt,其中s.id=:id 有趣的FindModifiedAtById:Long:Instant } /* ... */ val transactionTemplate=TransactionTemplatetransactionManager val结算:列表=transactionTemplate.execute{ amounts.map{ 结算存款。保存结算。。。 } }!! val executorService=Executors.newFixedThreadPool4 弗雷奇酒店{ executorService.execute{ val lastModified=SettlementProposition.findModifiedAtByIdit.id //但有时会抛出EmptyResultDataAccessException! } } 插入是在TransactionTemplate的事务中完成的,必须在数据库PostgreSQL中持久化和刷新,但有时并不总是抛出EmptyResultDataAccessException

我的代码有什么问题

注意:我已禁用hibernate的缓存级别2

注2:我们在生产中使用

堆栈跟踪:

org.springframework.dao.EmptyResultDataAccessException: Result must not be null!                                                                                                  
at org.springframework.data.repository.core.support.MethodInvocationValidator.invoke(MethodInvocationValidator.java:102) ~[spring-data-commons-2.2.0.RELEASE.jar!/:2.2.0.RELEASE] 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar!/:5.2.0.RELEASE]                      
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.0.RELEASE.jar!/:5.2.0.RELEASE]                                       
at com.sun.proxy.$Proxy210.findModifiedAtById(Unknown Source) ~[na:na]                                                                                                            
at com.github.yns.service.settlement.SimpleSettlementService.notModified(SimpleSettlementService.kt:484) ~[classes!/:0.0.1]                                                    
at com.github.yns.service.settlement.SimpleSettlementService.access$notModified(SimpleSettlementService.kt:74) ~[classes!/:0.0.1]                                              
at com.github.yns.service.settlement.SimpleSettlementService$lockAndHandle$1.invoke(SimpleSettlementService.kt:466) ~[classes!/:0.0.1]                                         
at com.github.yns.service.settlement.SimpleSettlementService$lockAndHandle$1.invoke(SimpleSettlementService.kt:74) ~[classes!/:0.0.1]                                          
at com.github.yns.service.lock.LockKt.withLock(Lock.kt:52) ~[classes!/:0.0.1]                                                                                                  
at com.github.yns.service.lock.LockKt.withLock$default(Lock.kt:43) ~[classes!/:0.0.1]                                                                                          
at com.github.yns.service.settlement.SimpleSettlementService.lockAndHandle(SimpleSettlementService.kt:465) ~[classes!/:0.0.1]                                                  
at com.github.yns.service.settlement.SimpleSettlementService.access$lockAndHandle(SimpleSettlementService.kt:74) ~[classes!/:0.0.1]                                            
at com.github.yns.service.settlement.SimpleSettlementService$submitSettlement$1.run(SimpleSettlementService.kt:216) ~[classes!/:0.0.1]                                         
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:na]                                                                                           
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:na]                                                                                          
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]                 

虽然错误的来源仍然未知,但在删除pgpool后,错误消失了!