springboot中使用jpa报错
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
原因是因为懒加载问题。
具体如下:(转)
简单理解就是因为,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调用的时候,hiberante会利用这个保存的方法去从数据库中取数据。而往往我们在jsp页面中使用getXXX()准备展示数据的时候,session早已经在dao中就关闭了
解决方法一般是在web.xml中配置为false。
因为侍boot新手,没有web.xml不知道这么修改。原因也找到了,于是找到了简答的方法。
如下,我本来的代码:
Product one = productDao.getOne(new Goods("Apple", "XS"));
修改后的代码:
Product one = productDao.findOne(new Goods("Apple", "XS"));
注意到了吗,有get方法变为了find方法。原因是get方法是从session中取,所以发送了上面的lazy报错,换成find方法后就可以简答解决这个问题了。效果是一样的,当然,如果个别情况下不得不用get,只有去修改web.xml了等方法了。