2011-01-09 56 views
1

我正在使用EclipseLink提供程序與mysql數據庫交談。我注意到,在我的應用程序的區域中,庫返回的查詢數據與數據庫不匹配。Java EclipseLink持久性庫返回的數據不正確

查詢是:

@NamedQuery(name = "EmailAddress.findAll", query = "SELECT e FROM EmailAddress e")

該查詢是正確的,我敢肯定這一點。我使用運行該查詢的代碼是:

EntityTransaction entr = em.getTransaction(); 
    entr.begin(); 
    emailAddresses = em.createNamedQuery("EmailAddress.findAll").getResultList(); 
    em.close() 

我把一個斷點上接近,這樣我可以看到EMAILADDRESS列表中的內容,大約1時在3它的陣列填充不正確。 多一點背景 - 我有一個表列出名稱,單擊名稱彈出對話框,並允許您更改名稱,點擊保存後關閉對話框並更新表(數據庫和用戶界面),有時候用戶界面不正確更新,編輯的名稱不會更新。更新運行包含上述塊的代碼。數據庫在代碼運行之前正確更新,只是該數組未正確填充。

有沒有其他人有任何與此有關的問題或有任何想法?

任何幫助非常感謝!

回答

1

我解決了這個問題通過使每個查詢緩存刷新,所以這是一件與緩存。由於這個應用程序是單用戶,並不是很大,所以沒有很多數據庫命中,所以這對這個應用程序來說很好。

0

難沒有看到代碼的其餘部分說,但你確定:

  1. 您的交易都沒有長篇大論(即你不打開一個事務,並保持打開狀態,同時等待用戶正在做某事)。您應該只打開和關閉數據查詢/更新周圍的事務。

  2. 當您創建或更新實體時,您分別調用persist(),merge()和refresh()。

+0

我絕對只是打開和關閉查詢/更新,我認爲我正確調用各自的方法。我已經在幾個場景中發生了這種情況,現在所有人都做了類似的行爲,但在不同的桌子上。如果我繼續編輯相同的名稱,那麼有時甚至會跳回到3或4編輯前的內容,這表明可能某些內容正在被持久性庫緩存? – chvck 2011-01-10 13:08:44