1. 程式人生 > >session.createQuery()與createSQLQuery()區別 .

session.createQuery()與createSQLQuery()區別 .

 createQuery與createSQLQuery兩者區別是:


前者用的hql語句進行查詢,後者可以用sql語句查詢

前者以hibernate生成的Bean為物件裝入list返回

後者則是以物件陣列進行儲存

所以使用createSQLQuery有時候也想以hibernate生成的Bean為物件裝入list返回,就不是很方便

突然發現createSQLQuery有這樣一個方法可以直接轉換物件

Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);

XXXXXXX 代表以hibernate生成的Bean的物件,也就是資料表映射出的Bean。

呵呵以後多注意,還是時不時的要看看hibernate各個物件方法的使用。



還有另外一個相關的小細節應注意:

比如有這樣一個po

PO: User.class
properties: userId,userName
DDL: create table tuser (userid varchar(10),username varchar(20));

當執行:
    session.createQuery("from User u").list()時生成的SQL:
  select userid,username from tuser;

當執行:
  
session.createQuery("from User u").iterator()時生成的SQL:
  
select userid from tuser;
  
可以看出list()一次將資料從資料庫中讀出直接填充到List中
  
iterator()將資料的主鍵從資料庫中讀出,當迴圈這個Iterator時才新增執行:
  
select userid,username from user where userid=?;把資料讀出。

在不同的應用範圍使用不同的方法,具體在hibernate應用中應當注意。