异常产生的原因:
1、hibernate实体对象有多个一对多关系或者多对一关系;
2、我们保存多的一方的实体对象使用的是List集合;
3、我们使用了fetch=FetchType.EAGER抓取策略;
满足以上三个条件就会产生cannot simultaneously fetch multiple bags异常。
异常产生的内部原因:
当(fetch = FetchType.EAGER)多余一个时,持久框架抓取一方的对象时,同时又将多方的对象加载进容器中,多方又可能关联其它对象,Hibernate实现的JPA,默认最高抓取深度含本身级为四级(它有个属性配置是0-3),若多方(第二级)存在重复值,则第三级中抓取的值就无法映射,就会出现 multiple bags。
解决方法:
1、使用fetch=FetchType.LAZY。(JPA)
2、将List集合换为Set集合。(JPA)
3、在对应的属性上添加@IndexColumn。(Hibernate)
网友评论