2016-01-28 58 views
1

我有一個大的查詢看起來是這樣的:變化Oracle數據庫是不可見的某個查詢

SELECT stuff, CASE WHEN (some subselect) > 0 THEN 'value 1' 
     WHEN (another subselect) > 0 THEN 'value 2' 
     ELSE 'value 3' END AS status 
FROM (yet another subselect) e 

它的偉大工程。但是,從Spring開始,我通過JpaRepositories進行了一些影響some subselect部分的更改,但由於某些原因,這些更改並非立竿見影。在其他查詢中,這些更改是可見的,我試着在Spring中使用幾種跨國機制,儘量不使用事務,我在存儲庫上使用saveAndFlush,沒有任何運氣。

但是,如果我在更改顯示之前重新啓動Tomcat服務器,也會發生此延遲。這個延遲也可以從外部數據庫操作程序中看到,所以我猜這個問題不在我的應用程序中。

某種Oracle高速緩存或事務會影響這種情況嗎?我如何清除,沖洗,提交它們?

Edit(對於請求評論):

在Java中,我只進行基本的改變

Java代碼

MyEntity myEntity = myEntityDao.findOne(someId); 
myEntity.setProperty(newValue); 
myEntityDao.saveAndFlush(myEntity); 

凡myEntityDao看起來像

@Repository 
public interface MyEntityDao extends JpaRepository<MyEntity, Integer> { 
    //... other unrelated HQL query methods 
} 

對不起,我不能發佈更具體的內容,但它是擁抱而且,我也不能,因爲公司的原因。還要注意,一切正常,但在修改和這個特定查詢之間存在一定的延遲。其他查詢可以立即看到更改。

+1

您能否請包括相關的JPA Java代碼? –

+0

添加更多詳情 – SinistraD

+0

我的猜測(猜猜這是不好的)是因爲春天會有一些奇怪的事情發生。我懷疑JPA接口在像Oracle這樣的支持良好的RDBMS中會遇到這樣的問題。 –

回答

1

最可能的原因是:
1)在單獨的事務中進行的更改,並且在查詢開始之前未提交。
Oracle不允許從其他事務中讀取未提交的更改。
查詢返回一致的數據到查詢開始的時刻。
2)如果您將事務更改爲「只讀」或「可序列化」,則Oracle將返回與事務啓動相一致的數據。因此在您的只讀事務開始之前,需要在另一個事務中進行更改。