Hibernate中多表联合查询遇到的问题(原生态的SQL语句解决办法)

来源:互联网 发布:gta4优化补丁告别卡顿 编辑:程序博客网 时间:2024/06/05 10:25

如何把多表的联合查询的结果放在一个没有和数据库映射的实体类?

首先,建立一个用于保存联合查询结果的实体类。

第二,建立一个sql语句,一般情况下。我喜欢使用 SQLQuery query = session.createSQLQuery("sql语句");这样的话就可以省去增加实体类的那一步操作,即addEntity()。

在前期做的时候就遇到了一个误区,我以为结果是新建实体类的一个集合,但是没有结果的输出,其实结果是一个Object的集合,List<Object> list= query.list();然后接下来的工作就很简单了,遍历list集合,再把object数组中的数据通过新建实体类中的set方法保存在对象当中。但是数组中的数据是object类型的所以在转换的时候需要数据类型的转换。对于int类型的需要它的包装类Integer.parseInt(objs[0].toString()),对于String类型强制类型转换即可。

贴一下代码,防止遗忘

SQLQuery query = session.createSQLQuery("select tea_orderdetails.od_id od_id, tea_info.t_id t_id,tea_user.u_name u_name,tea_info.t_name t_name,t_price,od_buynumber ,tea_info.t_digit  t_digit  "+" from tea_order,tea_orderdetails,tea_user,tea_info  where tea_order.u_id = tea_user.u_id  "+ " and tea_order.o_id = tea_orderdetails.o_id and         tea_orderdetails.t_id = tea_info.t_id and tea_user.u_id="+uid);
       
        List<Object> list=null;
        try {
            list = query.list();
        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("这有出现什么错误了");
        }
        
        for (int i = 0; i < list.size();i++)
        {       
            Object[] objs = (Object[]) list.get(i);

            System.out.println(objs[0] );

            System.out.println(objs[1] );

        }

以上是以sql语句的联合查询,其实还有hql语句的多表联合查询,我想可能需要懒加载。

0 0
原创粉丝点击