如何把多表的联合查询的结果放在一个没有和数据库映射的实体类?
首先,建立一个用于保存联合查询结果的实体类。
第二,建立一个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语句的多表联合查询,我想可能需要懒加载。