cannot simultaneously fetch multiple bags
2024-10-19 00:22:21
问题是什么时候出现的呢?
当一个实体对象中包含多于一个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,那就不会出现这个问题。
最新文章
- HTML 5 音频(audio)
- ★Java多线程编程总结 系列 转
- Attention and Augmented Recurrent Neural Networks
- Html5 Video 实现方案
- jQuery限制文本框只能输入正整数
- asp.net MVC 学习笔记
- 并行开发学习随笔1——plinq并行
- 使用JQuery插件,排序Gridview的某个字段
- POJ3690 Constellations 【KMP】
- JAVA课程设计-----加减法测试博客
- css基础-选择器
- 一起来学spring Cloud | 第一章:spring Cloud 与Spring Boot
- 自学Python4.2-装饰器
- ArcGIS 常见错误
- 【Crash】C++程序崩溃排查方法
- 用 Windows Live Writer 写blog,This is Test……..
- Java的简单书写格式
- JavaWeb基础—VerifyCode源码
- getopt例子
- DB2触发器简单例子