【问题标题】:JTA transaction in JPAJPA 中的 JTA 事务
【发布时间】:2011-02-21 05:30:54
【问题描述】:

我目前的项目包括,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模式下启动事务?

我对如何启动事务以持久化实体感到有些困惑。

EntityManager 在选择查询运行时工作,但不适用于持久化数据。

我试过了

  1. 使用 EntityManager,它抛出了 IllegalStateException : A JTA EntityManager cannot use getTransaction() 异常。

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

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

问候,

萨提亚

【问题讨论】:

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


    【解决方案1】:

    JTA与非JTA的区别可以参考this article

    JTA模式下如何访问JDBC Connection,可以参考this article

    使用 EntityManager,它抛出了 IllegalStateException:一个 JTA EntityManager 不能使用 getTransaction() 异常。

    我认为发生此错误是因为容器是管理您的事务的容器,而不是您(否则它将是一个非 jta,您将使用 application-managed-entityManager)

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

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

    我认为这已经很棒了,因为您已经可以从数据源获取连接,这是一种干净的方式。我认为您不必担心这里的事务,因为它已经由您正在使用的 Java EE 容器管理。那么为什么不直接做连接的东西呢? :-)

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-21
        • 2012-06-28
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 2021-04-01
        • 1970-01-01
        相关资源
        最近更新 更多