第一次使用hibernate4,通过以前的配置写dao类不能spring封装,可以直接调用hibernate自己的API也就是getCurrentSession();
然后就会出现org.hibernate.HibernateException: No Session found for current thread报错,出现的具体原因我也不懂但解决办法就是:
第一步:applicationContext.xml
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="txAdvice" pointcut="execution(* pmk.baseClass.impl.BaseService.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut="execution(* pmk.manage.book.service.impl.*.*(..))" />
</aop:config>
第二步:
在service类每个方法前加上@Transactional
注意:继承的service必须在aop配置写入baseService类,而且baseService也需要声明@Transactional