JPA中的JTA事务

时间:2011-02-21 05:30:55

标签: orm jpa jpa-2.0 jboss5.x hsqldb

我的当前项目包括Hibernate平台上的JPA2.0,HSQLDB2.0和JBoss5.1。

我还在JBoss中以hmc。

的名义定义了数据源

Persistence.xml看起来像: <persistence-unit name=HMC><jta-data-source>java:/hmc</jta-data-source>...</persistence-unit>

任何人都可以告诉我

  1. JPA persistence.xml中jta和非jta数据源定义之间的区别是什么。

  2. 如何获取连接,以JTA模式启动事务?

  3. 我对如何开始持久化实体的交易感到困惑。

    每当运行select查询时,EntityManager都会工作,但不能保存数据。

    我试过

    1. 使用EntityManager,它抛出IllegalStateException : A JTA EntityManager cannot use getTransaction()例外。

    2. 查找数据源并且能够获取连接对象,但无法从该javax.sql.Connection对象启动事务。

    3. 使用@Inject,@ Resource用于EJBContext,EntityManager和UserTransaction。

    4. 此致

      萨蒂亚

2 个答案:

答案 0 :(得分:2)

对于JTA和非JTA之间的差异,可以参考this article

有关如何在JTA模式下访问JDBC连接,您可以参考this article

  

使用EntityManager,它扔了   IllegalStateException:一个JTA   EntityManager无法使用   getTransaction()异常。

我认为发生此错误是因为容器是管理您的事务的容器,而不是您(否则它将是非jta,您将使用应用程序管理的实体管理器)

您无法访问事务的原因是您可以调用应该由Java EE容器执行的提交或其他方法。

  

查找数据源并且是   能够获得连接对象,但是   无法从那开始交易   javax.sql.Connection对象。

我认为这很好,因为你已经可以从数据源获得连接,这是一种干净的方式。我不认为你需要担心这里的事务,因为它已经由你正在使用的Java EE容器管理。那么为什么不只是连接已经连接的东西? : - )

答案 1 :(得分:0)

嗯..批量处理怎么样..我们非常有限!

http://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/batch.html

我需要会话,我需要交易。