2016-08-12 138 views
1

我们已经使用1.3.5版本创建了一个spring引导项目。我们的应用程序与Mysql数据库进行交互。 我们已经创建了一组jpa-repositories,其中我们使用findAll,findOne和其他自定义查询方法。spring引导应用程序:jpa查询返回旧数据

我们正面临一个随机发生的问题。以下是重现它的步骤:

  1. 使用spring-boot应用程序在db上触发读取查询。

  2. 现在使用上述读取查询返回的记录的mysql-console手动更改Mysql中的数据。

  3. 再次使用应用程序激发相同的读取查询。

第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(); 
} 
+0

你调用commit;?向我们展示您的更新查询和数据源以及JPA配置 –

+0

Hitham,我已经更新了相关的详细信息。更新查询只是更改varchar属性列的值。 –

+0

鉴于您正在改变Hibernate背后的价值,那么陈旧的值是否会来自它的第一级缓存? –

回答

1
@Cacheable(false) 

例如:

@Entity 
@Table(name="table_name") 
@Cacheable(false) 
public class EntityName { 
    // ... 
} 
相关问题