2010-03-10 4 views
36

Tomcat에서 실행되는 JPA + Spring 통합에 대해 몇 가지 질문이 있습니다. 몇 시간 동안 찾고 있었는데 구체적인 답을 찾을 수 없었으므로 다음과 같습니다 :스프링을 사용하여 JPA EntityManager를 삽입하는 방법

JPA entityManager 객체를 JaPaDaoSupport를 확장하지 않고 DAO 클래스에 삽입 할 수 있습니까? 그렇다면 Spring은이 경우 트랜잭션을 관리합니까?

나는 가능한 한 간단하게 내 스프링 구성을 유지하기 위해 노력하고있어 :

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="em"/> 
</bean> 
<bean id="em" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="myPU"/> 
</bean> 

편집 : 이들은 매우 helpfull했다, 여러분 모두 감사합니다!

답변

29

예, JPA가 약간 특이하므로 문제가 많지만 예. 이 말은 EntityManagerFactory 주입, 또는 다른 스레드 안전, 트랜잭션 프록시를 주입하거나 수

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-jpa

: 그것은 당신의 코드에서 명시 적으로 Spring에 대한 의존성없이, JPA EntityManagerEntityManagerFactory을 주입에 대한 설명서를 읽고 매우 가치 EntityManager입니다. 후자는 더 간단한 코드를 만들지 만 더 많은 스프링 배관이 필요합니다.

12

JPA entityManager 객체를 DAO 클래스에 삽입하여 JpaDaoSupport를 확장 할 수 있습니까? 그렇다면 스프링은이 경우 트랜잭션을 관리합니까?

12.6.3. Implementing DAOs based on plain JPA에서 흰색에 검은 색 설명되어 있습니다

주입 EntityManagerFactory 또는 EntityManager을 사용하여 임의의 봄을 종속성을 사용하지 않고 일반 JPA를에 대한 코드를 작성하는 것이 가능하다. PersistenceAnnotationBeanPostProcessor 이 활성화 된 경우 스프링 필드와 메소드 레벨에서 @PersistenceUnit@PersistenceContext 주석 모두 를 이해할 수있는 참고.

스프링 JPA JDBC에 JPA 트랜잭션을 노출 JpaTransactionManager을 구성된 수 있습니다 : 상응하는 DAO 구현이 (...)

그리고 트랜잭션 관리에 관한이 12.7. Transaction Management 봐가 한 것처럼 보일 수 있습니다 등록 된 JpaDialect이 기본 JDBC 연결 검색을 지원하는 경우 동일한 JDBC DataSource에 액세스하는 액세스 코드. Spring은 Toplink, Hibernate 및 OpenJPA JPA 구현을위한 방언을 제공합니다. JpaDialect 메커니즘에 대한 자세한 내용은 다음 섹션을 참조하십시오.

3

최신 스프링 + JPA 버전은 근본적으로이 문제를 해결합니다. 스프링과 JPA를 사용하는 방법에 대해 자세히 알아 보려면 a separate thread

관련 문제