복붙노트

[SPRING] HibernateTransactionManager 또는 JpaTransactionManager

SPRING

HibernateTransactionManager 또는 JpaTransactionManager

친구와 함께 응용 프로그램을 개발했지만 질문이 생겼습니다 ... 나는이 코드를 가지고 :

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${jdbc.dialect}</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
        </props>
    </property>
</bean>

<tx:annotation-driven />
<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="dataSource" ref="dataSource" />
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

그리고 그는 그것을 모두 제거하고 그것을 다음과 같이 변경했습니다 :

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

<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="persistenceUnit"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

그는 이것이 더 나은 접근이라고 말했지만 정확하게 이유를 설명하지는 못했습니다. 최대 절전 모드를 직접 사용하지 않는 것에 대해 우리는 더 이상 최대 절전 모드를 사용하지 않는다는 것을 의미합니까? 정말 좋은 접근 방법인가요?

DAO가 다음과 같이 변경되었습니다.

나는 가지고 있었다 :

@Autowired
private SessionFactory sessionFactory;

public void addUser(User user) {
    sessionFactory.getCurrentSession().save(user);
}

지금 :

@PersistenceContext
private EntityManager entityManager;

public void addUser(User user) {
    entityManager.persist(user);
}

해결법

  1. ==============================

    1.그는 당신의 코드가 Hibernate 대신 JPA에 의존하기를 원한다. javax.persistence.EntityManager는 JPA (Java EE) 표준 인터페이스이며 org.hibernate.SessionFactory는 Hibernate 속성 인터페이스입니다. SessionFactory에서 EntityManager로 이동하면 클래스가 더 이상 Hibernate에 종속되지 않게됩니다. 최대 절전 모드 대신 JPA 방식을 사용하는 것은 오늘날 대부분의 사람들이 모범 사례로 간주합니다.

    그는 당신의 코드가 Hibernate 대신 JPA에 의존하기를 원한다. javax.persistence.EntityManager는 JPA (Java EE) 표준 인터페이스이며 org.hibernate.SessionFactory는 Hibernate 속성 인터페이스입니다. SessionFactory에서 EntityManager로 이동하면 클래스가 더 이상 Hibernate에 종속되지 않게됩니다. 최대 절전 모드 대신 JPA 방식을 사용하는 것은 오늘날 대부분의 사람들이 모범 사례로 간주합니다.

    JPA 제공자가 필요하기 때문에 당신의 시스템은 여전히 ​​Hibernate에 의존적이다. 그러나 앞으로 다른 JPA 프로 바이더로 변경하고 싶다면 매우 정직해야합니다. JPA로가는 또 다른 이점은 JPA 인터페이스가 Hibernate 인터페이스보다 안정적이라는 것입니다.

  2. from https://stackoverflow.com/questions/12337504/hibernatetransactionmanager-or-jpatransactionmanager by cc-by-sa and MIT license