你好,我的問題是,我無法避免緩存。我正在使用彈簧數據Jpa與春季啓動1.5.4Spring Data Jpa - 緩存
我在做什麼: 我有一個情況,當一些客戶端請求我的REST端點與一些數據基於我創建一個實體,我保存它進入數據庫,接下來我請求另一個REST端點,它可以反應我的確定,但是我得到的請求還沒有完成。接下來,我正在等待另一個服務,它需要我的另一個REST端點(第一個客戶端始終在線)。這個端點修改了第一次請求後創建的實體,我在這裏遇到了問題。
基本上,第一個請求創建實體並使用「saveAndFlush」方法保存它。當第一次請求等待另一個線程使用的彈簧數據的JPA修改這個實體:
@Modifying(clearAutomatically = true)
@Query("UPDATE QUERY ")
@Transactional
int updateMethod();
但在那之後(當第一個請求從等待釋放)當我打電話的第一個線程findOne方法我上了年紀的實體,我曾嘗試還覆蓋方法:
@Transactional
default MyEntity findOneWithoutCache(Long id) {
return findOne(id);
}
但這不是工作壓力太大,我還添加了
@Cacheable(false)
public class MyEntity {
,這是不是工作壓力太大。
只有一個這是工作的方式,當我使用@Query這樣選擇該實體:
@Query("SELECT STATEMENT "
+ "WHERE p.id = ?1")
MyEntity findEntityById(Long id);
你能解釋我如何解決這個問題呢?
也許更容易: 線程#1:創建實體和saveAndFlush 線程#2:使用@Query 線程#1更新實體:findOne實體和變老的對象 – pustypawel
如果你使用'@Transactional(傳播= Propagation.REQUIRES_NEW )'在'findOneWithoutCache'方法上? – ledniov
效果相同 – pustypawel