2016-08-12 139 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 { 
    // ... 
} 
相關問題