2011-02-19 1 views
0

을 트랜잭션을 시작합니다 :는 어떻게 HSQLDB에 JPA 매핑을 가지고 persistence.xml을 아래와 같이 읽고 JTA에 EntityManager를

<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이 throw됩니다. JTA EntityManager는 getTransaction()을 사용할 수 없습니다.

아무에게도 이러한 상황에서 트랜잭션을 시작하고 커밋하는 방법을 알 수 있습니까?

감사합니다,

사티

답변

1

마지막으로 내가 줄 변경하여이 문제를 해결할 수 :

<persistence-unit name="HMC" transaction-type="RESOURCE_LOCAL"> 
+0

은 실제로 도움이되지 않습니다. 나는 여전히 같은 오류가있다. – Anton

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 

기본적으로 트랜잭션 유형 속성이 jdbc XA 데이터 소스가있는 JTA이면 IllegalStateException이 발생합니다.

제안 된 수정 사항 : localTx jdbc 데이터 소스로 트랜잭션 유형을 resource-local로 설정하십시오. 그렇지 않으면 IllegalStateException이 발생합니다.

관련 문제