实体经理类型和关联交易

时间:2012-05-07 11:58:55

标签: jpa transactions entitymanager

AFAIK,有两种类型的实体管理器。 1.集装箱管理实体经理 2.应用程序管理实体管理器

  1. 容器管理实体经理
    • 此类型的em仅使用JTA事务
  2. 以下是我的代码:

    @PersistenceContext(unitName = "", type = Transaction)
    EntityManager em;
    
    
    public void persist(T entity) {
    em.persist(entity)
    }
    

    问题: 执行代码时会抛出异常:TransactionRequireException 为什么会有这种例外?将@Resource UserTransaction添加到方法persist()后,没有发生TransactionRequireException。我不知道UserTransaction属于JTA吧。

    EntityTransaction et = em.getTransaction();
    

    参考上面的代码,为什么JTA事务类型不能调用getTransaction()?

    扩展的JTA Transaction em可以在EJB之外使用吗?

    1. 应用程序管理实体管理器
      • 利用JTA交易
      • 利用JDBC事务(资源本地事务)
    2. 请有人提供JDBC事务类型的源代码示例。

1 个答案:

答案 0 :(得分:2)

JPA持久性单元可以是JTA或RESOURCE_LOCAL。

如果您使用JTA,则必须通过SessionBeans或直接访问JTA来使用JTA进行事务处理。

请参阅, http://en.wikibooks.org/wiki/Java_Persistence/Runtime#Java_Enterprise_Edition