多对一属性,设置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也会一并加载。
你改成 createquery("select distinct l from line l left join fetch l.signs").list()就可以了嘛
fetch=join,在关联对象抓取时,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询.其策略用于定义 get/load一个对象时,如何获取非lazy的对象/集合,这些参数在Query中无效,当然在hql中也无效.所以在hql中是否加上outer join和fetch=join无关;
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....