<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true"/>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.sss.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"></aop:advisor>
</aop:config>
已经在Spring中配置了事务管理,但是在调用servcie的时候仍然会出现No transactional EntityManager available错误,有种原因是因为applicationContext.xml和spring-mvc.xml配置的时候扫描的包不正确
1.在applicationContext.xml中配置排除Controller层
<context:component-scan base-package=“com.sss”>
<context:exclude-filter type=“annotation” expression=“org.springframework.stereotype.Controller”/>
</context:component-scan>
2.在spring-mvc.xml中配置添加Controller层,去除Service层
<context:component-scan base-package=“com.sss”>
<context:include-filter type=“annotation” expression=“org.springframework.stereotype.Controller”/>
<context:exclude-filter type=“annotation” expression=“org.springframework.stereotype.Service”/>
</context:component-scan>