org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread 这个异常。
(据说hibernate 4以上的版本才会有)
@Repository
public class UserDaoImpl implements IUserDao {
@Autowired
private SessionFactory sessionFactory;
private Session getSession(){
return sessionFactory.getCurrentSession();
}
这里可以用Session session = sessionFactory.openSession(),然后代码中去关闭 session.close.当然为了偷懒的原则必须不自己去管理session。让Spring容器自己去处理。研究了一下。发现 只要在applicationContext.xml 中追加
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
然后再在实现类加上@Transactional
@Repository
@Transactional
public class UserDaoImpl implements IUserDao {
@Autowired
private SessionFactory sessionFactory;
private Session getSession(){
return sessionFactory.getCurrentSession();
}
...
}