问题描述
spring和hibernate整合后进行数据库的增删改查操作测试时,运行测试类报如下异常:
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
问题分析
造成该问题的原因是没有给hibernate的数据库操作开启事务。 而在Hibernate中,在进行数据库操作之前是必须要开启事务的。 因为hibernate中与数据库建立的连接connection的自动提交auto-commit是默认false的,也就意味着,如果不手动开启事务transaction,想要对数据库进行插入、更新或删除操作来修改数据的话,语句执行后在数据库里是不生效的,因为没有提交。 如果要想向数据库提交数据,必须手动提交,手动提交commit,就得获取到事务transaction来调用transaction.commit()方法来提交使语句生效了。所以hibernate的数据库操作是必须要开启事务的;
解决方式
要对hibernate的数据库操作开启事务,需要有以下几点配置:
- 开启事务支持:spring配置文件中通过<tx:annotation-driven>或@EnableTransactionManagement注解来启用事务支持。
- 给你的@Repository加上@Transactional。