2010-12-27 3 views
0

일부 응용 프로그램에서 JpaTemplate을 사용하여 보일러 플레이트 코드를 제거 할 수 있는지 알아보기 시작했습니다. 단위 테스트에서 실행하면 Java에서 JpaTemplate을 트랜잭션 처리와 함께 사용 하시겠습니까?

public class SomeDaoClass { 

    public SomeDaoClass(boolean handleTransactionsLocally) { 
      _handleTransactionsLocally = handleTransactionsLocally; 
    } 

    private void persist(final Object object) throws MyCustomException { 
     try { 
      if (_handleTransactionsLocally) { 
       EntityTransaction transaction = getEntityManager().getTransaction(); 

       transaction.begin(); 
       getEntityManager().persist(object); 
       transaction.commit(); 
      } 
      else { 
       getEntityManager().persist(object); 
       getEntityManager().flush(); 
      } 
     } 
     catch (Exception exception) { 
      throw new MyCustomException(exception); 
     } 
    } 
} 

, 내가 getEntityManager()을 무시하고 생성자에 충실 제공 :

내가 지금 이런 일이있다. 이것을 서버에 배포하면 주입 된 엔티티 관리자를 컨테이너에서 반환하기 만하면됩니다.

그러나, 나는이 대신 같은 것을 할 수있을 것 같아 :

 _jpaTemplate = new JpaTemplate(getEntityManager()); 
     _jpaTemplate.persist(object); 

은 어떻게 jpaTemplate 트랜잭션을 처리하는 방법을 자바 코드에서 지정할 수 있습니까? 나는 @Transactional으로 메소드에 주석을 달았지만이 방법은 효과가없는 것 같습니다. _jpaTemplate에 속성을 설정해야합니까? 이것은 가능한가?

TIA

외에도 @Transactional을 추가하는

답변

1

, 당신은 (!) 참고로 유형 org.springframework.orm.jpa.JpaTransactionManager

입니다 (귀하의 경우), 그 빈은 transactionManager라는이 또한 applicationContext.xml<tx:annotation-driven />를 지정하고 필요 -을 일반적으로 DAO를 트랜잭션으로 만드는 것은 좋지 않습니다. 대신 서비스 계층을 트랜잭션 화하는 것이 좋습니다.

+0

그러나 applicationContext.xml 없이는이 작업을 수행 할 수있는 방법이 있습니까? 그게 내가 여기서 운전하는거야. – javamonkey79

+0

에는 applicationContext.xml이 있습니다. 그리고 물건을 추가하지 않고도 선언적 트랜잭션을 수행 할 수는 없습니다. – Bozho

+0

applicationContext.xml이 없습니다. JdbcTemplate 클래스와 같은 방식으로 JpaTemplate을 사용하려고합니다. – javamonkey79

1

Bozho의 답변 외에도 실제로 선언적 트랜잭션을 얻으려면 JpaTemplate을 사용할 필요가 없습니다.

Spring에서 선언적 트랜잭션을 사용하여 JPA를 사용하는 전형적인 접근 방식은 @PersistenceContext-annotated 필드에 EntityManager을 공유하는 것입니다. 13.5.2 Implementing DAOs based on plain JPA을 참조하십시오.

+0

흠, 미안 해요. 제가 어떻게 묻고 있는지 잘 모르겠습니다. – javamonkey79

관련 문제