2014-10-28 44 views
0

我學習EJB/JPA,我不知道如何把這個片段的工作:非同步EntityManager如何從數據庫中讀取?

@Stateful 
public class Sample { 
    @PersistenceContext(type=PersistenceContextType.EXTENDED, 
         synchronization=SynchronizationType.UNSYNCHRONIZED, 
         unitName="..") 
    EntityManager em; 

    public Employee get(int id){ 
     retirm em.find(Employee.class , id);  
    } 

    // ... 
} 

這是一個狀態bean,所以默認情況下它應該在容器管理事務(必填)包裹。

但另一方面,一個非同步管理器被認爲不加入事務,除非明確加入。

那麼,如果它不加入tx,它如何從數據庫中獲取數據?它可能會包含髒/幻影讀取等?

這段代碼來自「Pro JPA 2」。

回答

2

從JPA 3.1.1 2.1規格:

find方法(只要它會被調用在鎖定或與LockModeType.NONE調用) 和getReference方法不要求在事務中被調用。如果具有事務範圍的持久化上下文的實體管理器 正在使用中,則所得到的實體將被分離;如果使用具有擴展持久性上下文的實體管理器,則將對其進行管理。

+0

很酷,謝謝!但是,對於這樣的無讀取事務,隔離級別是多少? – 2014-10-29 15:04:07