a、b两个个相关联的表(a中存取的是b的对象),我现在要模糊查询数据在a表,where条件是要从b表中查询某个数据,
hql是这样写的吧 ...where a.b.xx='xx',但问题来了,如果在a表中b这个字段是空值,那么hibern生成的sql语句还是对a 和b表关联,这样条件中就有个不成立的条件, where a.b 这是等于空,但查询语句还是a.b.xx=“xx”,这样什么都查不出了,不知道我说明白了没,小弟语言能力不强啊,先谢谢各位帮忙的大哥大姐

解决方案 »

  1.   

    .where a.b.xx='xx' and a.b is not null 即可
      

  2.   

    感觉有些没说清楚,我再补充些,两个表相关联时,hibernate会自动生成这样的关联where a.b=b.id,但现在问题是B是空的,不存在,这个值是可以为空,我现在是想模糊查询,在一个大表里,b是空值这模糊查询也得写上,汗,不会上传图片,大家将就着看代码吧,就一模糊查询:hql += " and (paveStruct.startNum like '%" + queryString 
        + "%' or paveStruct.endNum like '%" + queryString
        + "%' or paveStruct.lineCode.lxdm like '%" + queryString 
        + "%' or paveStruct.lineCode.lxqc like '%" + queryString
        + "%' or paveStruct.upFaceMaterial.objname like '%" + queryString
        + "%' or paveStruct.midFaceMaterial.objname like '%" + queryString 上边的 paveStruct 就是那个a表,upFaceMaterial是b表,模糊查询中为了写全,不管他是否为空,都得写上,所以hibernate会自动关联的,我开始在hibernate的xml配置中写上的not-found="ignore"参数,但问题还在,还是查不出b对象为空时的数据。
      

  3.   

    感觉有些没说清楚,我再补充些,两个表相关联时,hibernate会自动生成这样的关联where a.b=b.id,但现在问题是B是空的,不存在,这个值是可以为空,我现在是想模糊查询,在一个大表里,b是空值这模糊查询也得写上,汗,不会上传图片,大家将就着看代码吧,就一模糊查询: hql += " and (paveStruct.startNum like '%" + queryString 
        + "%' or paveStruct.endNum like '%" + queryString 
        + "%' or paveStruct.lineCode.lxdm like '%" + queryString 
        + "%' or paveStruct.lineCode.lxqc like '%" + queryString 
        + "%' or paveStruct.upFaceMaterial.objname like '%" + queryString 
        + "%' or paveStruct.midFaceMaterial.objname like '%" + queryString 上边的 paveStruct 就是那个a表,upFaceMaterial是b表,模糊查询中为了写全,不管他是否为空,都得写上,所以hibernate会自动关联的,我开始在hibernate的xml配置中写上的not-found="ignore"参数,但问题还在,还是查不出b对象为空时的数据。
      

  4.   

    大家好,这个群已经变更换了其目的了。已经变成了IGOOGLE爱好者的群,这里讨论IGOOGLE的应用。更重要的是我已经开始开发一个类似的IGOOGLE的平台,这个平台面向的内容不一样而已。但是我想找到志同道合的朋友一起来,谢谢,如果是成都地区最好。有兴趣的朋友加QQ群:39207574或是加我QQ好友。
    谢谢
      

  5.   

    没人回答了吗 -_-!,我hql语句写了两个表的关联(where a表.b表.字段=“xx”),但我不想让hibernate关联这两个表,最起码我得控制它是否关联,怎么办啊
      

  6.   


    a表和b表确定是关联的,是这样的,hql你这样写——from a表 where a表.b表.字段=“xx”,那么hibernate就会自动根据 where 后的 “a表.b表.字段” 给你在句子中关联a,b表,这样——from a表 ,b表 where a表.b表=b表.id and a表.b表.字段=“xx”,我要做模糊查询,所有的字段都得预先写在hql语句中,但如果a表中有条数据b字段没有,那么这时hibernate生成的这个sql是不成立的“a表.b表=b表.id ”,你得控制着这个条件,不然查不出来,怎么控制?
      

  7.   

    hql += " and (paveStruct.startNum like '%" + queryString 
        + "%' or paveStruct.endNum like '%" + queryString 
        + "%' or paveStruct.lineCode.lxdm like '%" + queryString 
        + "%' or paveStruct.lineCode.lxqc like '%" + queryString 
        + "%' or paveStruct.upFaceMaterial.objname like '%" + queryString 
        + "%' or paveStruct.upFaceMaterial is null" +
        + "%' or paveStruct.midFaceMaterial.objname like '%" + queryString 
    楼主不是想的到a表中包括b这个字段为空时的所有数据吗?????