论坛首页 Java企业应用论坛

Hibernate关联查询中with的经典使用

浏览 3170 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2010-01-09  

 在项目采用Hibernate关联,采用关联使用比较简单,在关联时添加条件,减轻迪卡儿集的从而提高效率!

 

项目写HQL时使用的其中一个实例如下:

  StringBuilder sb = new StringBuilder();

 sb.append(" from Hotel h, RoomType r left join r.roomTypeSpecialPrices as rp with rp.from <= :checkInDate and rp.to >=:checkOutDate left join rp.roomTypeSpecialPriceInfos as ri with ri.dayNo=1,RoomTypePrice p ,RoomAmount a right join a.roomStatus as s, RoomTypePriceValidTime v\r\n");
  // 基本外键关联条件
  sb.append(" where h.id = r.hotelId and r.id = p.roomTypeId and r.id = s.roomTypeId and r.id = v.roomTypeId" +
    " and s.statusDate between p.from and p.to\r\n");

 

 

备注:如果在不采用with方式,将with中条件添加到where之后相等于,将关联表信息查询交叉之后过滤。

         采用with方式,相等于在查询交叉之前先过滤,减轻数据库负担。

 

   发表时间:2010-01-11  
我以前都是把过滤条件都放到where之后,现在是知道with语句可提高数据库的负担。我现在是明白了,非常感谢。。。
0 请登录后投票
   发表时间:2010-01-13   最后修改:2010-01-13
再次支持你 希望有好的 你第一时间拿来分享
需注意的是 笛卡尔积 你写错了 下次小心哦 要不有可能有人会借题发挥
0 请登录后投票
   发表时间:2010-01-14  
whaosoft 写道
再次支持你 希望有好的 你第一时间拿来分享
需注意的是 笛卡尔积 你写错了 下次小心哦 要不有可能有人会借题发挥

谢谢,本人打字没有注意,以后小心,^_^
0 请登录后投票
   发表时间:2010-02-08  
不是吧,数据库没这么傻吧,他应该会也是先过滤再连接的啊,LZ能不能贴一段测试结果出来看看啊
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics