2010-06-20 5 views
14

제목 : 모두 UserTransactionEntityTransaction의 차이점은 무엇입니까?UserTransaction과 EntityTransaction의 차이점

JTA가 필요한 경우 (예 : 여러 가지 항목에 대한 쿼리를 수행하는 경우) UserTransaction을 사용하고 JPA 만 필요한 경우 (예 : 쿼리가 원 자성 인 경우) EntityTransaction이 사용됩니다.

그 둘 사이의 유일한 차이점은 무엇입니까? 아니면 그 이상입니까? JTA는 이 필요 (예 : 대해 여러 개의 물건에 대한 조회를 할), 그리고 JPA 만 필요한 경우 EntityTransaction 사용된다 (예를 들어 쿼리 이 때 때

+0

중복 가능성 http://stackoverflow.com/questions/2517062/what-is-difference-between-resource-usertransaction-andentitymanager-gettransac) – ewernli

+1

@ewernli : 그건 좀 불공평합니다. 그 질문은 내가 처음에 그 질문에 대한 답을 이미 알고 있었다면 그 질문은 중복 된 것임을 아십시오! 질문이나 대답 모두'EntityTransaction'에 대한 언급을하지 않습니다. - 묻기 전에 검색했습니다. – bguiz

+7

나는 그것을 완전히 이해한다. 그래서 내가 최선을 다해 당신의 질문에 대답 할 시간을 가졌습니다. 그래서 사람들이 두 질문에 대한 답변을 읽을 수 있도록 가능한 중복을 표시하는 것은 SO의 일반적인 관행 일뿐 아니라 SO의 품질을 향상시킵니다. 그것은 비판이나 아무것도 아닙니다.문제는 "그렇게 정확한 것으로 표시"된 5 개의 투표가있는 경우에만 "정확한 복제본으로 폐쇄"됩니다. – ewernli

답변

20

내 기본적인 이해는 UserTransaction을 사용된다는 점이다 원자).

기본적으로는 맞지만 "여러 가지"및 "원자 적"에 대한 설명은 약간 이상합니다. JTA는 개발자가 분산 트랜잭션을 사용하여 다중 리소스 (데이터베이스, JMS 브로커 등)의 변경을 원자 적으로 (전부 또는 일부) 수행 할 수 있도록합니다. 하나의 리소스 (예 : 단일 데이터베이스)에 액세스하는 경우 JTA가 필요하지 않지만 트랜잭션은 여전히 ​​원자 적입니다 (모두 또는 아무것도 아님). 예를 들어 한 데이터베이스에서 일반 JDBC 트랜잭션을 사용하는 경우입니다. JPA를 사용 독립형 경우

  • , 당신은 트랜잭션을 직접 구별 할 EntityTransaction를 사용

    UserTransactionEntityTransaction을 고려.

  • JPA가 JTA와 통합되는 관리되는 환경에서 사용되는 경우 UserTransaction을 사용합니다. EntityManager은 JTA 분산 트랜잭션 관리자에 연결합니다. 내가 알고있는 유일한 미묘한 점은 변경 사항의 플러시를 고려한 것입니다. EntityTransaction이 사용되면 JPA는 변경 사항을 삭제해야한다는 것을 알고 있습니다. 트랜잭션이 UserTransaction을 사용하여 제어되는 경우 JTA registerSynchronization을 사용하여 콜백을 등록해야 트랜잭션이 완료되기 전에 변경 내용이 데이터베이스로 플러시됩니다. EJB를 CMT (컨테이너 관리 트랜잭션)와 함께 사용하는 경우 UserTransaction을 사용할 필요조차 없습니다. 앱 서버가 트랜잭션을 시작하고 중지합니다.

관련 질문 :