fetch的默认设置:
JPA接口默认为一对多为Lazy,多对一为Eager,但是Hibernate反向工程生成Entity时,多对一为Lazy,需要手动改为Eager。
问题描述:
一开始因为使用的是Hibernate的默认设置,出现因为懒加载报错的问题,
由于是懒加载,关联对象不立刻加载(即从数据库读入到内存),在使用到的时候加载;
如果在session中(session未关闭),什么时候要用,就什么时候取(再次访问数据库),这个没有问题,
但是,在session外(session已关闭),就不能再取了。如果这时候要去取,就会报错,没有session可用。
解决方法:
就是把@ManyToOne中的fetch设置为FetchType.EAGER ,用EAGER时,因为在内存里,所以在session外也可以取。
之前用的是,网上搜索的方法,在主表的@OneToMany中加上fetch=FetchType.EAGER,报错解除。
紧接着出现,该表的记录不能删除的问题,网上查了一下,说是因为加的那个fetch=FetchType.EAGER的问题,
接着按上面的描述重新修改了一下,两个问题都没有了。