【问题标题】:How does an unsynchronized EntityManager read from DB?未同步的 EntityManager 如何从 DB 中读取数据?
【发布时间】:2014-12-24 09:38:38
【问题描述】:

我正在学习 EJB/JPA,我想知道这个 sn-p 应该如何工作:

@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,它如何从 DB 中获取数据?是否可能包含脏读/幻读等?

这个 sn-p 来自“Pro JPA 2”。

【问题讨论】:

    标签: java jpa ejb entitymanager


    【解决方案1】:

    来自 JPA 2.1 规范的 3.1.1:

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

    【讨论】:

    • 酷,谢谢!但是,这种无事务读取的隔离级别是多少?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2023-03-18
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多