现象:
- 在项目已经配置了OpenSessionInViewFilter,但是某一些请求依然报错:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of xxx, could not initialize proxy - no Session```
网上找的解决懒加载异常的四种方法都了解。由于业务需求,这个一对多的属性肯定是需要设置成懒加载的。
-
跟踪源码后,最终发现问题原因:
controller 调用service方法获取数据, 在controller中获取懒加载属性之前,有另外一个service(带有@Transactional)抛出过异常,并且这个异常并没有继续往外抛出,这里导致session会提前关闭,在controller后面代码里面获取懒加载属性时就会抛出:LazyInitializationException -
解决办法(二选一):
- 在将这个抛出异常的service继续往外抛出
- 不要抛出异常返回业务错误代码