锁定老帖子 主题:HQL的返回值该怎么取得?
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-12-04
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]; } //Cat c = (Cat) row[2]; 为什么放在后面 for (int i=0; i< l.size(); ; i++) { Object[] row = (Object[]) l.get(i); Cat c = (Cat) row[2]; Long id = (Long) row[0]; String name = (String) row[1]; } 这样不行吗 |
|
返回顶楼 | |
发表时间:2005-02-01
robbin 写道 很多人搞不清楚怎么取得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]; } 既然取整个PO 和 取 某几个需要的字段都可以 达到要求, 那 在效率上到底差多少呢? 取PO 给我带来的好处是写起来更方便了,如果速度上没多大损失,以后都取PO 多好啊? 什么时候取PO ,什么时候取 其中的某几个字段,这个 度 怎么把握? |
|
返回顶楼 | |