0

AFAIK,有两种类型的实体管理器。1. 容器管理实体管理器 2. 应用管理实体管理器

  1. 容器托管实体管理器
    • 这种类型的 em 只使用 JTA 事务

下面是我的代码:

@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 可以在 EJB 之外使用吗?

  1. 应用程序托管实体管理器
    • 利用 JTA 事务
    • 利用 JDBC 事务(资源本地事务)

请任何人提供有关 JDBC 事务类型的源代码示例。

4

1 回答 1

2

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

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

见, http ://en.wikibooks.org/wiki/Java_Persistence/Runtime#Java_Enterprise_Edition

于 2012-05-07T13:44:39.510 回答