cannot simultaneously fetch multiple bags 异常的解决办法

异常信息以下:html

    org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bagslinux

  ......框架

问题是何时出现的呢?fetch

当一个实体对象中包含多于一个non-lazy获取策略时,好比@OneToMany,@ManyToMany或者@ElementCollection时,获取策略为(fetch = FetchType.EAGER)spa

出现问题的缘由:hibernate

当(fetch = FetchType.EAGER)多余一个时,持久框架抓取一方的对象时,同时又将多方的对象加载进容器中,多方又可能关联其它对象,Hibernate实现的JPA,默认最高抓取深度含自己级为四级(它有个属性配置是0-3),若多方(第二级)存在重复值,则第三级中抓取的值就没法映射,就会出现 multiple bags。htm

解决方法:对象

一、将(fetch = FetchType.EAGER)改成(fetch = FetchType.LAZY)索引

二、将List修改为Set集合,即推荐@ManyToMany或@OneToMany的Many方此时用Set容器来存放,而不用List集合。ip

三、改变FetchMode为@Fetch(FetchMode.SUBSELECT),即发送另一条select语句抓取前面查询到的全部实体对象的关联实体。

四、在对应的属性上添加@IndexColumn,该注解容许你指明存放索引值的字段,目的跟Set容器不容许重复元素的道理同样。

推荐的处理办法:

方法2;

方法3和方法4是Hibernate特有的,非JPA标准;

若是能够用方法1,那就不会出现这个问题。

参考:

        http://www.linuxso.com/architecture/22611.html

相关文章
相关标签/搜索