1
我们已经使用1.3.5版本创建了一个spring引导项目。我们的应用程序与Mysql数据库进行交互。 我们已经创建了一组jpa-repositories,其中我们使用findAll,findOne和其他自定义查询方法。spring引导应用程序:jpa查询返回旧数据
我们正面临一个随机发生的问题。以下是重现它的步骤:
使用spring-boot应用程序在db上触发读取查询。
现在使用上述读取查询返回的记录的mysql-console手动更改Mysql中的数据。
再次使用应用程序激发相同的读取查询。
第3步之后,我们应该收到第2步的修改结果,但是我们得到的是修改前的数据。
现在,如果我们再次使用应用程序启动读取查询,它会为我们提供正确的值。
此问题是随机发生的。我们在应用程序中没有使用任何类型的缓存。
在调试过程中,我发现jpa-repository代码实际上调用了mysql,它也获取最新结果,但是当这个调用返回到我们的应用服务时,令人惊讶的是返回值有旧数据。
请帮助我们确定可能的原因。
JPA /数据源的配置:
- spring.datasource.driverClassName = com.mysql.jdbc.Driver
- spring.datasource.url = JDBC:MySQL的://本地主机:3306/DBNAME ?autoReconnect的=真
- spring.datasource.username =根
- spring.datasource.password = XXX
- spring.jpa.database平台= org.hibernate.dialect.MySQL5Dialect
- spring.datasource.max-WAIT = 15000
- spring.datasource.max活性= 100
- spring.datasource.max空闲= 20
- spring.datasource.test上借入=真
- spring.datasource.remove废弃=真
- spring.datasource.remove废弃超时= 300
- spring.datasource.default - 自动提交=假
- spring.datasource.validation查询=选择1
- spring.datasource.validation间隔= 30000
- hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
- 休眠。show_sql =假
- hibernate.hbm2ddl.auto =更新
服务方法:
@Override
@Transactional
public List<Event> getAllEvent() {
return eventRepository.findAll();
}
JPARepository:
public interface EventRepository extends JpaRepository<Event, Long> {
List<Event> findAll();
}
你调用commit;?向我们展示您的更新查询和数据源以及JPA配置 –
Hitham,我已经更新了相关的详细信息。更新查询只是更改varchar属性列的值。 –
鉴于您正在改变Hibernate背后的价值,那么陈旧的值是否会来自它的第一级缓存? –