对于未开启事务的 service层使用OpenCurrentSession这个方法是会报错的。Could not obtain transaction-synchronized Session for current thread。参考http://www.cnblogs.com/chyu/p/4817291.html。
但是他的文中一个比较明显不合理之处,事务不应该加到DAO应该加在Service。
解决办法
1、配置事务,并添加事务驱动
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
2、在SerIve层添加 类名前@Transitional注解。
我的理解是事务是一个同步线程,那么只有开启事务才能正常使用该方法。但是我用代码开启事务还是会报这个错,这是一个比较难以 理解的问题, 结合的Hibernate 干了一些别的事情。