取單個字段,會返回字段List:
取多個字段,Hibernate把每個id和name做成一個2個元素的單維數(shù)組,List實際上是一個單維數(shù)組的集合。
在這種情況下,HQL是不會去構(gòu)造PO的,這一點很容易驗證。JCS是對象Cache,如果寫了這樣的HQL,JCS里面是空的,說明Hibernate沒有構(gòu)造PO,如果再加上一個對象c本身,JCS里面就有數(shù)據(jù)了,如下:
java代碼: |
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個元素的單維數(shù)組,List實際上是一個單維數(shù)組的集合。
java代碼: |
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是不會去構(gòu)造PO的,這一點很容易驗證。JCS是對象Cache,如果寫了這樣的HQL,JCS里面是空的,說明Hibernate沒有構(gòu)造PO,如果再加上一個對象c本身,JCS里面就有數(shù)據(jù)了,如下:
java代碼: |
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]; } |