不同步的EntityManager如何从DB读取?

时间:2014-10-28 20:09:12

标签: java jpa ejb entitymanager

我正在学习EJB / JPA,我想知道这个代码片段应该如何工作:

@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,因此默认情况下它应该包含在容器管理器事务中(REQUIRED)。

但另一方面,除非明确加入,否则不同步的经理不会加入交易。

那么,如果它没有加入tx,它如何从数据库中获取数据?是否可能包含脏/幻读等?

此片段来自“Pro JPA 2”。

1 个答案:

答案 0 :(得分:2)

从JPA 2.1规范3.1.1开始:

  

find方法(前提是它在没有锁定的情况下调用或使用LockModeType.NONE调用)   并且不需要在事务中调用getReference方法。如果是实体经理   如果正在使用事务范围的持久性上下文,则将分离生成的实体;如果   使用具有扩展持久性上下文的实体管理器,它们将被管理。