2013-07-29 3 views
3

@PersistenceUnit 주석으로 생성자를 통해 EntityManagerFactory를 설정하는 방법을 아는 사람은 누구입니까? xml 구성을 통해이 작업을 수행 할 수 있습니다. 그러나 나는 해당 주석 구성을 모른다. @PersistenceUnit 주석으로 생성자를 통해 EntityManagerFactory를 설정하는 방법

<bean id="handler" class="com.handler.LocalHTHandler"> 
<constructor-arg ref="entityManagerFactory"></constructor-arg> 

<bean id="entityManagerFactory" 
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
<property name="jpaVendorAdapter"> 
    <bean 
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
</property> 
<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml" /> 
<property name="persistenceUnitName" value="myUnit"></property> 

그리고 그것은 잘 작동된다. 내 처리기 bean에 대한 주석을 통해 처리 할 수 ​​있습니까? @persistanceunit에 대해 들었지만, 그것을 달성하기 위해 생성자에 배치 할 수 없습니다. 그 맞습니까? 퍼시스턴스 유닛과 같이 애플리케이션 컨텍스트 파일에 정의

public abstract class BasicJpaDao<T> implements IBasicDao<T> { 

    @PersistenceContext(type = PersistenceContextType.TRANSACTION, unitName = "default") 
    protected EntityManager entityManager; 

    // Default constructor for Spring 
    public BasicJpaDao() {} 

    //Use this constructor to set the entity manager yourself 
    public BasicJpaDao(EntityManager entityManager) { 
     this.entityManager = entityManager; 
    } 

    ... 

} 

:

<!-- JPA --> 
<!-- Creates an EntityManagerFactory for use with the Hibernate JPA provider --> 
<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSourceGlobal" /> 
    <property name="packagesToScan" value="me.comocomo.nutrino.domain.jpa" /> 
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter" /> 

    <property name="jpaPropertyMap"> 
     <map merge="true"> 
      <entry key="hibernate.format_sql" value="${hibernate.format_sql}" /> 
     </map> 
    </property> 
</bean> 

<!-- jpaVendorAdapter (works in conjunction with the persistence.xml) --> 
<bean id="jpaVendorAdapter" 
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="database" value="${jpa.database}" /> 
    <property name="showSql" value="${jpa.showSql}" /> 
    <property name="databasePlatform" value="${jpa.dialect}" /> 
    <property name="generateDdl" value="${jpa.generateDdl}" /> 
</bean> 

<!-- In order to enable EntityManager injection --> 
<bean id="persistenceAnnotation" 
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

<!-- Transactions --> 
<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    <property name="dataSource" ref="dataSourceGlobal" /> 
</bean> 

우리 코드에서

답변

1

우리 PersistenceContext 통해 주입 엔티티 관리자를 사용하여베이스 DAO 개체가 마찬가지로, Injection을 사용하여 EntityManagerFactory를 가져 오는 EntityManagerFactoryFactory 클래스를 생성 한 다음 공장을 빈에 전달합니다.

@Component 
public class EntityManagerFactoryFactory { 

    @Inject 
    private EntityManagerFactory factory; 
} 
+0

injecting entitymanger가 괜찮습니다.하지만 entitymanager 자체를 생성자 arguement로 mybean에 전달해야합니다. –

+0

Spring 용 기본 생성자를 EntityManager를 삽입 할 때 사용할 수 있고, 편집 용처럼 다른 용도로 사용할 수 있습니다. 그런 다음 Entity Manager를 자신의 EntityManagerFactory 클래스에 삽입하고 Entity Manager를 Bean에 전달할 수 있습니다. 만약 이것이 당신이 찾고있는 것이 아니라면, 당신이 bean에서 Entity Manager를 수동으로 설정해야하는 이유를 자세히 설명해 주면 도움이 될 것입니다. –

+0

위의 설명에서 나는 실수를했습니다. 나는 entitymanager가 아니라 entitymanagerfactory를 생성자 arg로 mybean에 전달해야합니다. –

0

JSR 330 주석을 사용하여 Spring에서는 불가능합니다. 현재 @PersistenceContext이 매개 변수에 허용되지 않도록 정의되어 있으므로 생성자에 EntityManagers를 삽입 할 수 없습니다. https://java.net/jira/browse/JPA_SPEC-72

+1

하지만 스프링 팀에서 작업하고 있습니다. https://jira.spring.io/browse/SPR-10443 –

관련 문제