如何通用解析Hibernate返回结果集List 5
最近,使用Hibernate由于需要大量的解析返回的结果集合List,将所需的结果按照一个HashMap<字段名,字段值>的形式,由于结果集有多条,所以需要将这个Hash...
最近,使用Hibernate由于需要大量的解析返回的结果集合List,将所需的结果按照一个HashMap<字段名,字段值>的形式,由于结果集有多
条,所以需要将这个HashMap再放入一个ArrayList中。如此就可以循环ArrayList再通过字段名从HashMap中取得所需要的值。
但是现在Hibernate返回的结果集List结构并不固定
表Student和Teacher两张表,其中Teacher和Student是一对多的关系,Student中一个t_id的字段引用Teacher的主键;
Teacher 有字段T_ID,T_NAME Student有字段S_ID,S_NAME,T_ID
hql="select a from Teacher a";此时List里面仅仅是以List->Object(Teacher)的形式进行封装
hql="select a.name from Teacher a";此时List里面就封装的是基本类型Object(String)
hql="select a,b.name from Teacher a,Student b where a.id=b.tId";此时List里面封装的就是一个Object[]{Teacher,String}
那么我如何通过一个方法去解析这些List让他们以
HashMap htm=new HashMap();
ArrayList<Object[]) arr=new ArrayList();
if(list.size>0){
for(Object[] obj : list){
Teacher t=(Teacher)obj[0];
String sName=(String)obj[1];
htm.put("T_ID",t.getTId);
htm.put("T_Name",t.getTName);
htm.put("S_NAME",sName);
arr.add(htm);
}
}
这儿我是假设List里面装的是Object数组,而且这个方法也不是通用的,如果是其他的hql语句这个解析方法就不适用了。
那么我就需要一个通用的方法去解析Hibernate返回的结果集List,注意这儿只需要能够解析Hibernate返回的就够了。当然万能更好。
求各位达人们帮帮忙。
现在已经写好了针对单个对象的通用方法,但是如果这个List里面装的是Object(String)就没办法得到对应的字段名,还有List封装Object[]{}的也没办法解析带基本类型的,因为List里面如果是基本类型,就根本没办法得到对象,就没有办法通过反射去取对应的字段名。
有哪位兄弟给个解决方案 展开
条,所以需要将这个HashMap再放入一个ArrayList中。如此就可以循环ArrayList再通过字段名从HashMap中取得所需要的值。
但是现在Hibernate返回的结果集List结构并不固定
表Student和Teacher两张表,其中Teacher和Student是一对多的关系,Student中一个t_id的字段引用Teacher的主键;
Teacher 有字段T_ID,T_NAME Student有字段S_ID,S_NAME,T_ID
hql="select a from Teacher a";此时List里面仅仅是以List->Object(Teacher)的形式进行封装
hql="select a.name from Teacher a";此时List里面就封装的是基本类型Object(String)
hql="select a,b.name from Teacher a,Student b where a.id=b.tId";此时List里面封装的就是一个Object[]{Teacher,String}
那么我如何通过一个方法去解析这些List让他们以
HashMap htm=new HashMap();
ArrayList<Object[]) arr=new ArrayList();
if(list.size>0){
for(Object[] obj : list){
Teacher t=(Teacher)obj[0];
String sName=(String)obj[1];
htm.put("T_ID",t.getTId);
htm.put("T_Name",t.getTName);
htm.put("S_NAME",sName);
arr.add(htm);
}
}
这儿我是假设List里面装的是Object数组,而且这个方法也不是通用的,如果是其他的hql语句这个解析方法就不适用了。
那么我就需要一个通用的方法去解析Hibernate返回的结果集List,注意这儿只需要能够解析Hibernate返回的就够了。当然万能更好。
求各位达人们帮帮忙。
现在已经写好了针对单个对象的通用方法,但是如果这个List里面装的是Object(String)就没办法得到对应的字段名,还有List封装Object[]{}的也没办法解析带基本类型的,因为List里面如果是基本类型,就根本没办法得到对象,就没有办法通过反射去取对应的字段名。
有哪位兄弟给个解决方案 展开
3个回答
展开全部
查询不同的表 返回不同的对象集合,字段都不一样,应该没办法做万能的HashMap吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用SQL就写一条就可以了,你用连表查询,下面介绍方法
public Map<String, Object> 方法名{
。。。
List<Map<String, Object>> list = Query query = session.createSQLQuery("SELECT T.T_ID \"T_ID\", T.T_NAME \"T_NAME\", S.S_NAME \"S_NAME\" FROM TEACHER T, STUDENT S WHERE S.S_ID = T.T_ID " ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();;
return list;
}
注意这里用的是createSQLQuery,这样查询出来的是MAP类型并且key都是自定义的【\"T_ID\",】等,
Transformers.ALIAS_TO_ENTITY_MAP是以MAP类型返回值
不妨试一试
如果key就是字段名,那就更简单了,把所有\"key\"都删除了,返回的KEY全是大写的字段名
public Map<String, Object> 方法名{
。。。
List<Map<String, Object>> list = Query query = session.createSQLQuery("SELECT T.T_ID \"T_ID\", T.T_NAME \"T_NAME\", S.S_NAME \"S_NAME\" FROM TEACHER T, STUDENT S WHERE S.S_ID = T.T_ID " ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();;
return list;
}
注意这里用的是createSQLQuery,这样查询出来的是MAP类型并且key都是自定义的【\"T_ID\",】等,
Transformers.ALIAS_TO_ENTITY_MAP是以MAP类型返回值
不妨试一试
如果key就是字段名,那就更简单了,把所有\"key\"都删除了,返回的KEY全是大写的字段名
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
针对每一个来写比较好,你那个Object的想法倒是不错,不过,估计行不通....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询