解决方案 »

  1.   

    好像hibernate也是执行sql语句啊。
    左连接使用join时,好像是with吧,你把with加上,然后把之前sql里面on的后半部分加上。试试看。
      

  2.   

    HQL语句:"select a,b from  a left  join b where b.flag='1'";
    试试
      

  3.   

    from A left join A on A.bid=B.id where b.flag='1'
      

  4.   

    你是说string sql = “select a.*,b.name from a left join b on a.bid=b.id and b.flag='1'”;这样查询正确,而换为hql  string hql = "from A left join A.B where b.flag='1'";却不行?
    如果是这样,两种方法:1.你可以使用原生查询执行sql  2.不要使用join,hibernate不支持left   join语法,给你个文章看看,当然建议使用92语法 
    http://awaitdeng.iteye.com/blog/735063http://awaitdeng.iteye.com/blog/735063
      

  5.   

    补充一句,如果你特别想这么做,刚刚给你的那篇文章了也有具体的做法,好好珍藏吧!类似于迫切左外连接 :"from Customer c left join fetch c.orders o where c.name like 't%'"+" o.name like 't%'"
      

  6.   

    用Hibernate不需要使用左联接。
    直接使用 From A就可以了。需要调用B的时候 直接用 A。B就可以了
      

  7.   

    public List  findDeviceInfoByAreaId(Integer areaId,Integer deviceTypeId){
    final StringBuffer sql=new StringBuffer();
    sql.append("select d.deviceinfoId,d.deviceinfoName,s.devicetypeName,w.warnNotifyDeviceId,l.levelName,w.warnNotifyType,l.levelId from  device_deviceinfo  as d   ");
    sql.append(" left join sys_devicetype as s on d.deviceinfoTypeId=s.devicetype  left join device_coreinfo as c on d.deviceinforCoreId=c.coreinfoId  ");
    sql.append(" left join sys_warnnotify as w on   d.deviceinfoId=w.warnNotifyDeviceId  left join sys_warnlevel  as l on  w.warnNotifyLevelId=l.levelId  ");
    sql.append(" where 1=1 ");
    if(areaId!=null&&areaId>0){
    sql.append(" and  c.coreinfoAreaId="+areaId+"");
    }
    if(deviceTypeId!=null&&deviceTypeId>0){
    sql.append(" and  s.devicetype="+deviceTypeId+"");
    }
    return  (List) getHibernateTemplate().execute(  
                    new HibernateCallback() {  
                        public List doInHibernate(final Session s)  
                                throws HibernateException, SQLException {  
       Query query = s.createSQLQuery(sql.toString());//执行普通sql  
    List list = query.list();  
    return list ;  
                        }  
                    });
    }
    其实都差不多的
      

  8.   

    string hql = "from A left outer join fetch A.B"; 这个是正解
      

  9.   

    结帖了,没找到解决办法,我还是用sql的方法去处理了。谢谢各位。
      

  10.   

    找到方法了,可能是我没有说清楚,我先说下我的两个表数据如下:
    A表:
    id ,  name ,  bid
    1      名字1  
    2      名字2    1
    3      名字3     2B表:
    id,  name,   flag
    1       张三     true
    2       李四     false我之前用的hql写法如下:
    string hql = "from A left join A.B where b.flag='true'";
    这个时候返回的结果只有A表的id=2这条数据我现在修改如下即可实现:
    string hql = "from A left join A.B where (b.flag is null or b.flag='true')";
    这样就实现了我返回id=1和id=2这两条数据了。再次谢谢各位。