在SingBoot集成JPA时进行单元测试时:
异常报错如下:org.hibernate.LazyInitializationException:could not initialize proxy [ com.example.demo.entity.User#1] - no Session
说明:单元测试在进行数据库访问的时,对数据库的访问与操作的session已经释放了。
网上看到解释原因 :因为 hibernate(这里是 Spring Data JPA ) 跟 spring 整合以后,hibernate 的 session 就交给 spring 管理了,请求进来的时候打开 session,请求完成的时候关闭 session。当我们想要使用懒加载去获取数据的时候,这时候原先的那个 session 已经关闭了,不能再获取数据了
解决办法:在测试类或方法上加上事务注解控制@Transactional可以解决,保证操作是一个会话过程。