Hibernate 查询返回结果集为对象数组后的取值方法

查询语句为
String hql="select b.*,r.username from Buy b left join b.Register r order by buytime";
session.createQuery(hql);
第一个问题:上面的这两个语句有问题吗?正确的写法怎么写。
第二个问题:在页面上怎么取得查询结果,用struts2标签。

第1个回答  2010-12-07
建议这样写:
语句:
String hql = "from CLass1 as c1, Class2 as c2 where conditions....."
......

使用结果:
for(int i=0;i<resultList.size();i++){
Object obj = resultList.get(i);
Object[] objs = (Object[])obj;
CLass1 c1 = (CLass1 )objs[0];
CLass1 c2 = (CLass2 )objs[0];
.....
String c1name = c1.getUserName();
String c2name = c2.getUserName();

}

原则是不查单个类的属性,查类,从list中取出Object后转化成Object[],然后按照类出现在hql中的先后顺序,从Object[]中取得对应的类的实例,然后再取得各种数据。

注意下面: 查询出来的list中每个元素是Object,需要转化成Object[]后,再单独取不同的类。
Object obj = resultList.get(i);
Object[] objs = (Object[])obj;
CLass1 c1 = (CLass1 )objs[0];
CLass1 c2 = (CLass2 )objs[0];

以上本回答被网友采纳
第2个回答  2010-12-07
String hql = "select b,r.username from Buy b left join b.Register r order by b.buytime";
for(Object[] obj:list){
String username = obj[1];
Buy buy = obj[0];
}

不知道可以帮到你不本回答被提问者采纳
第3个回答  2010-12-07
第一个问题:上面的这两个语句有问题吗?正确的写法怎么写。
这个语句有点问题,因为查询的结果是对象的集合,所以应该保证有相应的对象类型来保存查询结果,如果你查询的是对象Buy,那么直接用Buy就能保存,但如果查询的结果是一个类Buy的对象再加上一个r.username的值,那么显然你缺少用于保存这个结果的对象,另外select b.* 这样的写法也不对,如果你需要b的所有字段,只需要这样"from Buy order by buytime "就可以了,因为这样可以得到Buy的对象集合,如果你需要b.Register里面的username只需要用获得的对象.Register.username就能得到了。

第二个问题:在页面上怎么取得查询结果,用struts2标签
要得到查询结果,首先在Action里面放入request里面的查询结果--对象集合(一般是ArrayList)
request.setAttribute("buylist", buylist);
取出来,用Struts2的遍历标签来遍历这个对象集合
<%@taglib prefix="s" uri="/struts-tags"%>
<s:iterator value="#request.buylist" status="statu" id="item">
<s:property value="Register.username" />
<s:property value="id" />
</s:iterator>
相似回答