cannot simultaneously fetch multiple bags 异常的解决办法
来源:互联网 发布:笔记本降温软件 编辑:程序博客网 时间:2024/04/28 19:27
异常信息如下:
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
......
问题是什么时候出现的呢?
当一个实体对象中包含多于一个non-lazy获取策略时,比如@OneToMany,@ManyToMany或者@ElementCollection时,获取策略为(fetch = FetchType.EAGER)
出现问题的原因:
当(fetch = FetchType.EAGER)多余一个时,持久框架抓取一方的对象时,同时又将多方的对象加载进容器中,多方又可能关联其它对象,Hibernate实现的JPA,默认最高抓取深度含本身级为四级(它有个属性配置是0-3),若多方(第二级)存在重复值,则第三级中抓取的值就无法映射,就会出现 multiple bags。
解决方法:
1、将(fetch = FetchType.EAGER)改为(fetch = FetchType.LAZY)
2、将List修改成Set集合,即推荐@ManyToMany或@OneToMany的Many方此时用Set容器来存放,而不用List集合。
3、改变FetchMode为@Fetch(FetchMode.SUBSELECT),即发送另外一条select语句抓取前面查询到的所有实体对象的关联实体。
4、在对应的属性上添加@IndexColumn,该注解允许你指明存放索引值的字段,目的跟Set容器不允许重复元素的道理一样。
推荐的处理办法:
方法2;
方法3和方法4是Hibernate特有的,非JPA标准;
如果可以用方法1,那就不会出现这个问题。
- cannot simultaneously fetch multiple bags 异常的解决办法
- Hibernate - cannot simultaneously fetch multiple bags 异常
- JPA的cannot simultaneously fetch multiple bags异常的解决
- JPA的cannot simultaneously fetch multiple bags异常的解决
- PA的cannot simultaneously fetch multiple bags异常的解决
- cannot simultaneously fetch multiple bags异常的解决
- Hibernate: cannot simultaneously fetch multiple bags 问题的解决办法
- cannot simultaneously fetch multiple bags 问题的解决办法
- cannot simultaneously fetch multiple bags 问题的解决办法
- cannot simultaneously fetch multiple bags 问题的解决办法
- cannot simultaneously fetch multiple bags 问题的解决办法
- cannot simultaneously fetch multiple bags 问题的解决办法
- cannot simultaneously fetch multiple bags 问题的解决办法
- cannot simultaneously fetch multiple bags 问题的解决办法
- 转]cannot simultaneously fetch multiple bags 问题的解决办法
- Hibernate: cannot simultaneously fetch multiple bags 问题的解决办法
- cannot simultaneously fetch multiple bags的解决方法
- cannot simultaneously fetch multiple bags 的解决方法
- 23种设计模式系列
- document对象详细分析
- 高路德艺术品会员卡发布盛典 邹秦、邹鑫参加
- Linux设备驱动之button按键驱动学习与小结
- 陆河重信科技 邹秦打造食用菌栽培重点企业
- cannot simultaneously fetch multiple bags 异常的解决办法
- C++ main 函数中 (int argc,char *argv[]) 的 ”3 W + 1 H “
- 深圳重信科技 一家专业从事食用菌栽培的企业
- Access restriction: The method encode(byte[]) from the type CharacterEncoder,Access restriction: The
- 邹鑫打造珠宝平台 高路德艺术品交流中心
- c++ 链表(模板)简单实现
- 第三章
- 《C语言及程序设计》实践参考——大奖赛计分
- 《C语言及程序设计》实践参考——位乘大于位和