我有JPA映射到HSQLDB,而persistence.xml读取如下:
<persistence-unit name="HMC">
<jta-data-source>java:hmc</jta-data-source>
<class>org.hmc.jpa.models.BloodGroup</class>
<class>org.hmc.jpa.models.ContactInfo</class>
<properties>
<property name=hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
</properties>
</persistence-unit>
并将EntityManager作为:
entManagerFactory = Persistence.createEntityManagerFactory("HMC");
我的JBoss5.1中也为hsqldb定义了数据源。如果我开始事务,它会抛出IllegalStateException:JTA EntityManager不能使用getTransaction()
在这种情况下,有人可以让我知道如何开始和提交交易。
此致
萨蒂亚
答案 0 :(得分:2)
这是getTransaction的javadoc所说的......
EntityTransaction getTransaction()
Return the resource-level EntityTransaction object. The EntityTransaction instance may be used serially to begin and commit multiple transactions.
Returns:
EntityTransaction instance
Throws:
IllegalStateException - if invoked on a JTA entity manager
所以基本上它意味着如果transaction-type属性是带有jdbc XA数据源的JTA,那么你会得到一个IllegalStateException。
建议修复:尝试使用localTx jdbc数据源将transaction-type设置为resource-local,否则将导致IllegalStateException。
答案 1 :(得分:1)
最后,我可以通过更改行来处理这个问题:
<persistence-unit name="HMC" transaction-type="RESOURCE_LOCAL">