hibernate 两难 问题

Super赛亚人 2014-07-07 10:32:31
有3个表


mainTable 和 T1 ,T2是一对多关系。 我设置了抓取为延迟加载。


后来发现 获取 mainTable 时要得到T1,T2的数据要发送很多次 sql 去查询,这是因为延迟加载,所以每用到T1,T2数据都要去查询。


我开始使用leftjoin 想一起查出来, 但是报cannot simultaneously fetch multiple bags 错误。我查了,不能多个一起用left join。


我该怎么办
...全文
85 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Super赛亚人 2014-07-07
  • 打赏
  • 举报
回复
引用 5 楼 echofeel 的回复:
改变FetchMode为@Fetch(FetchMode.SUBSELECT),即发送另外一条select语句抓取前面查询到的所有实体对象的关联实体。

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "reportInf")
	@Fetch(FetchMode.SUBSELECT)
	private List<Model> models;
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "reportInf")
	@Fetch(FetchMode.SUBSELECT)
	private List<Part> parts;

加上了,依旧发sql 语句去查询model 与part。还是延迟加载。
  • 打赏
  • 举报
回复
改变FetchMode为@Fetch(FetchMode.SUBSELECT),即发送另外一条select语句抓取前面查询到的所有实体对象的关联实体。
Super赛亚人 2014-07-07
  • 打赏
  • 举报
回复
引用 3 楼 voiletbee 的回复:
你试试把fetch=FetchType.LAZY,变成懒加载模式,或者把List修改成Set集合
。。。我是延迟加载,我只能用list
紫蜜蜂 2014-07-07
  • 打赏
  • 举报
回复
你试试把fetch=FetchType.LAZY,变成懒加载模式,或者把List修改成Set集合
Super赛亚人 2014-07-07
  • 打赏
  • 举报
回复
引用 1 楼 voiletbee 的回复:
具体查询什么,延迟加载怎么就不能用left join
可以使用,但是不能多个都用left join,会报错:cannot simultaneously fetch multiple bags
紫蜜蜂 2014-07-07
  • 打赏
  • 举报
回复
具体查询什么,延迟加载怎么就不能用left join

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧