這是一個簡單的問題可能是em.flush數據通過SQL開發人員不可見
在我的代碼我做了
user = em.find(User,pk);
user.setName("name");
em.flush();
這種沖洗後()statemenet使用調試器停止使用斷點。我現在檢查使用我的SQL開發人員工具來查看是否在數據庫中進行了更改。我沒有看到在數據庫中完成的更改。
這對flush命令意味着什麼。
- 由flush生成的sql將被髮送到數據庫,但隨後在數據庫中排隊等待commit語句通過?和SQL語句不適用?
修改1: 所以可能是我沒說清楚第一次爲我所試圖做的
我有一個羣集的設置,其中在節點1:在交易1一個我正在改變一些參數,比如說用戶實體的名稱,並對它們進行刷新(),這樣你就可以訪問數據庫。我不能做一個提交,因爲有很多其他操作需要在事務中發生
與此交易1中的節點(機器)2並行,我正在獲取用戶實體。現在在這個交易中,唯一的願望是檢查用戶的最新名字。 這是平行的,我需要做的事情。 有人可以讓我知道如何做到這一點,使分佈式節點看到最新的變化。
Node 1 Node 2
try{ try {
em.getTransaction.begin em.getTransaction.begin
user = em.find(User,pk);
System.out.println.(user.getName())
/* this prints JERRY*/
user.setName("TOM");
em.flush();
...
... user = em.find(User,pk);
System.out.println.(user.getName())
/*This should print TOM*/
...
em.commit() //no commit in this transaction
} catch (Exception e) { } finally {
//rollback }
} finally {
}
閱讀關於事務隔離級別 – DataNucleus 2012-07-09 06:31:08
你想要使用Read Uncommitted(http://stackoverflow.com/questions/2471055/why-use-a-read-uncommitted-isolation-level)但我必須建議你不想這樣做。我強烈建議你找出一些組織代碼的替代方法,這樣你可以部分地提交單個工作單元,而無需長時間運行阻塞事務。讀取未提交的內容可能是一個醜陋的曲目,除非您準備好了後果。 – jjathman 2012-07-10 02:09:28