2012-01-14 66 views
15

我的問題是,爲什麼刷新不起作用:我們怎樣才能JPA EntityManager的沖洗工作

public void ejbService(){ 
    Customer c = em.find(Customer.class,1); 
    c.setName("newName"); 
    em.flush(); 
    //at this point when I query mysql table I can not see "newName" 


    thread.sleep(10000); 

    c.setName("anotherName"); 
} 

整理我看「anotherName」在DB 的方法後還我em.find檢查( Customer.class,1,Lock.None);但還是不行

RGDS

回答

21

你臉紅,但你不能犯 - 或以其他方式終止該事務/會話這很可能配置爲自動提交。

是的,在調用flush()後,DBMS現在知道您的數據 - 但遵循ACID標準,在DBMS被告知提交之前,沒有其他數據庫會話會看到這些數據。

不知道你的應用程序等其他國家的後面架構額外的細節,你可能希望做類似:

em.getTransaction().commit(); 
+1

究竟什麼是齊平的使用? – Nav 2012-01-14 17:00:19

+1

我也將刷新模式更改爲提交而不是自動但沒有任何反應 – Nav 2012-01-14 17:02:33

+7

大多數JPA實現將在JVM中(在EntityManager內)緩存操作。 flush()只會強制將這些操作發送到數據庫等,但並不意味着提交。 http://stackoverflow.com/questions/4275111/correct-use-of-flush-in-jpa-hibernate有一些額外的細節/討論可能對你有所幫助。 – ziesemer 2012-01-14 17:03:15