hibernate的fetch=join的用法
推荐于2016-05-17 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:25897
获赞数:1464984
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
展开全部
多对一属性,设置fetch="join"时.
1.hql查询时,要根据lazy是否等于true来,确定fetch="join"是否生效。如果lazy=true,这不会生效(和没有设置fetch="join"一样),需要你在hql语句中明确写明left join fetch 这个属性。如果lazy=false,则会生成再生成一个select语句单独查询把(和fetch=join的语意不符),查询的结果放到这个实体属性中。
2.如果是session方法(如get()会hibernate.initiaiztion())读取这个实体(entity1)时,都会生成对应的关联查询sql语句,把这个实体属性(property1)关联的表的信息一起查出来,存放到实体属性中。
3.并且其他实体(entity2)把本实体(entity1)作为他的属性时,初始化entity2实体的entity1属性时其property1也会一并加载。
1.hql查询时,要根据lazy是否等于true来,确定fetch="join"是否生效。如果lazy=true,这不会生效(和没有设置fetch="join"一样),需要你在hql语句中明确写明left join fetch 这个属性。如果lazy=false,则会生成再生成一个select语句单独查询把(和fetch=join的语意不符),查询的结果放到这个实体属性中。
2.如果是session方法(如get()会hibernate.initiaiztion())读取这个实体(entity1)时,都会生成对应的关联查询sql语句,把这个实体属性(property1)关联的表的信息一起查出来,存放到实体属性中。
3.并且其他实体(entity2)把本实体(entity1)作为他的属性时,初始化entity2实体的entity1属性时其property1也会一并加载。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fetch=join,在关联对象抓取时,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询.其策略用于定义 get/load一个对象时,如何获取非lazy的对象/集合,这些参数在Query中无效,当然在hql中也无效.所以在hql中是否加上outer join和fetch=join无关;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询