2014-11-12 2 views
0

jboss를 사용하고 jpa (JTA 트랜잭션 유형) 내에서 최대 절전 모드 4를 사용했습니다. DAOUtil 클래스에서 엔티티 관리자를 얻으려고 시도하고 얻을 수 있으며 쿼리를 수행 할 수 있습니다. 그러나 엔티티 관리자를 플러시 할 때 오류가 발생했습니다.유형이있는 JPA가 JTA가 EJB 컨테이너에서 처리하는 방법

Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress 
    at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:970) 
    at com.vms.dao.hibernate.HibernateDAOSession.flush(HibernateDAOSession.java:288) 

나는 인터넷을 검색하고, 그들이 말하는 : 우리가 JTA 트랜잭션 유형 JPA를 사용하는 경우, 우리는 이것이 올바른하는 EJB에 EntityManager를 주입해야합니까? 이것이 맞다면 엔티티 관리자 용 스레드 풀은 어떨까요? 나는 그것에 관해 많은 것을 혼란스러워했다.

JTA 트랜잭션 유형 내에서 jpa를 사용하는 진정한 방법을 알려주십시오.

추가되었습니다.

EJB 외부에서 EntityManager를 가져 오는 getter가 있기 때문에이 문제가 떠오른다.

JTA 트랜잭션 유형이있는 JPA에서 한 가지 더 질문합니다. 네이티브 SQL로 업데이트 할 수 없다고 생각합니다. ejb에서는 아래 코드를 사용했습니다.

Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query 

누구든지 설명 할 수있다 : 코드로 실행할 때

public int executeNativeUpdate(String query, Map<String, Object> params) { 
    Query q = em.createNativeQuery(query); 
    setParameters(q, params); 
    return q.executeUpdate(); 
} 

오류가 발생합니다. 나는 JPA adn JTA에서 beginer입니다. JTA 트랜잭션 유형으로 JPA를 사용하고 Stateless EJB에 EntityManager를 삽입하면 EJB 컨테이너가 트랜잭션을 처리합니다. 맞습니까? 나는 거래를 시작하거나 커밋 할 필요가 없다. 어때 네이티브 SQL? EJB 컨테이너가 모두 처리 할 수 ​​있습니까?

+0

HibernateDAOSession 및 DAOUtil 코드 표시 – bigGuy

답변

0

JTA 트랜잭션 유형을 사용하는 경우 컨테이너는 트랜잭션 (응용 프로그램 서버 또는 openjpa 또는 기타)을 관리합니다. 이 경우 모든 메소드 호출이 트랜잭션에서 wrap되는 EJB를 사용해야합니다. 엔티티 관리자 생성, 커밋, 롤백, 관리 - 컨테이너 작업.

관련 문제