hibernate组件作为标识符的问题StringBuffer?queryHSql??new?StringBuffer()???? ??queryHSql.append(?
hibernate组件作为标识符的问题
- StringBuffer?queryHSql?=?new?StringBuffer();???? ??
- queryHSql.append("?from?YxXqcl?"); ??
- List?list?=?session.createQuery(queryHSql.toString()).list();??
- for (int i = 0; i < list.size(); i++) {
???YxXqcl xqcl = (YxXqcl)list.get(i);
}
调用的时候,发现list.size()查到的是正常的,但是跟踪list.get(i)却是null,想不通是哪里的问题。 1 楼 letle 2007-01-17 都没人知道吗?还是问题太弱智 2 楼 抛出异常的爱 2007-01-17 hibernate的意思是冬眠
他还是冬眠所以list.get(i);
的结果还没从数据库中出来
有可能有也可能没有
的薛定锷量子猫状态
用system.out.println(list.get(i));
固化一下就可以从跟踪里看出来了。。。 3 楼 letle 2007-01-17 谢谢,别的没有用过组件做标识符的情况的正常的,为什么用了就取不出来了? 4 楼 ll_2046 2007-01-17 对于你的问题,我建议你参考一下Robbin的帖子:HOL的返回值怎么取得?
相关内容如下:
很多人搞不清楚怎么取得HQL的返回值,下面举例说明:
取单个字段,会返回字段List:
代码
Query q = s.createQuery("select c.id from Cat as c");
List l = q.list();
for (i=0; i< l.size(); i++) {
Long id = (Long) l.get(i);
System.out.println(id.longValue());
}
取多个字段,Hibernate把每个id和name做成一个2个元素的单维数组,List实际上是一个单维数组的集合。
代码
Query q = s.createQuery("select Cat.id, Cat.name, from Cat ");
List l = q.list();
for (int i=0; i< l.size(); i++) {
Object[] row = (Object[]) l.get(i);
Long id = (Long) row[0];
String name = (String) row[1];
}
在这种情况下,HQL是不会去构造PO的,这一点很容易验证。JCS是对象Cache,如果写了这样的HQL,JCS里面是空的,说明Hibernate没有构造PO,如果再加上一个对象c本身,JCS里面就有数据了,如下:
代码
Query q = s.createQuery("select c.id, c.name,c from Cat as c");
List l = q.list();
for (int i=0; i< l.size(); ; i++) {
Object[] row = (Object[]) l.get(i);
Long id = (Long) row[0];
String name = (String) row[1];
Cat c = (Cat) row[2];
}
感觉跟你的问题很接近,希望能对你有所帮助! 5 楼 letle 2007-01-17 在hibernate上发现一个和我有同样问题的帖子
http://forum.hibernate.org/viewtopic.php?p=2334315&sid=21f391ca412f0bedd12030e5831557e4