SpringがDAOオブジェクトへのプロキシをサービスに注入しているという問題がありますが、このサービスはコントローラーに注入され、具象クラスです。これにより、サービス全体のトランザクションを使用できず、DAO 呼び出しごとにトランザクションを個別に起動できます。それは私が期待する振る舞いです。
構成:
コントローラーは、@Controller アノテーションとコンストラクター DI を持つクラスです。
サービス:
@成分 @トランザクション public class UserServiceImpl は UserService を実装します { ...}
ダオ:
@成分 @トランザクション public class UserDaoImpl は UserDao を実装します {
JPA構成:
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
<property name="dataSource" ref="dataSource"/>
<property name="persistenceUnitName" value="xxxPersistenceUnit"/>
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
</bean>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven />
なぜそれが起こっているのか誰にも分かりますか?