您的位置:首页 > 其它

hibernate关于hql的左外连接查询

2016-07-22 10:24 393 查看

左外连接查询

            最近小弟遇到写hql的左外连接查询,是关于按照sql语句写出来的始终出错,然后百度上面找方法,我的查询在实体映射文件里面是没有配关系的,只是在两张表里面都存在相同的字段罢了,网上的教程说,在实体映射文件配置什么什么关系的,在我这里来好像反而不够用了,然后就各种找错,最后终于弄出来了.
       小弟我也刚毕业,也许还有更好的方法,但是我实在是没有找到,就只有先将就着这样用了!
       废话不多说,下面是代码!!!

      关系表
      Supplier    --    供应商                                            SupplierType  --  供应商类别

      supId               供应商编号                                     typeId             供应商类别编号

      supName        供应商名称                                     typeName      供应商类别名称

      supPhone       供应商电话                                     typeBak          供应商备注

      supAddress     供应商地址
      typeId             
供应商类别编号
      supBak            供应商备注

      注:两张表没有配置级联关系,只存在一个相同的typeId属性

      hql语句:
      String hql = " select sup.supId,sup.supName,sup.supPhone,sup.supAddress,type.typeId,type.typeName
as supBak from Supplier as sup,SupplierType as type
" +

                " where sup.typeId = type.typeId and sup.typeId = ?";

     List<Object> list = getCurrentSession().createQuery(hql).list();

      如果要映射到供应商上面讲供应商类别名称显示出来   可以给type.typeName as supBak这样查出来的数据就是Object类型的数据,
      如果不在供应商一起显示出类别名称,就不用type.typeName as supBak,但是查出来的数据依然是Object类型的,需要在外部强转成相应的类型即可!
       List<Supplier> reslist=new ArrayList<Supplier>();

       if(list != null && list.size() > 0){

          for (Object d : list) {

             Object[] objs = (Object[])d;

             Supplier sup = new Supplier((int)objs[0],(String)objs[1],(String)objs[2],(String)objs[3],(int)objs[4],(String)objs[5]);

                 reslist.add(sup);

           }

       }

      

       如此便返回了一个相应的对象集合,将类别名称也封装进了供应商当中,页面可以直接通过supplier.supBak显示出供应商类别的名称

       虽然感觉漏洞百出,但是效果基本上出来了,如果有大神知道更好的方法,请告诉我一下,谢谢!小弟也刚出道,啥都不懂,望大家指点,互相进步!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息