hibernate 本地sql查詢sqlquery 編輯
收藏使用sqlquery
對原生sql查詢執行的控制是通過sqlquery介面進行的,通過執行session.createsqlquery()獲取這個介面。最簡單的情況下,我們可以採用以下形式:
list cats = sess.createsqlquery( " select * from cats " ).addentity(cat. class ).list();
這個查詢指定了:
sql查詢字串
查詢返回的實體
這裡,結果集欄位名被假設為與對映檔案中指明的欄位名相同。對於連線了多個表的查詢,這就可能造成問題,因為可能在多個表中出現同樣名字的字段。下面的方法就可以避免欄位名重複的問題:
list cats = sess.createsqlquery( " select from cats cat " ).addentity( " cat " , cat. class ).list();
這個查詢指定了:
sql查詢語句,它帶乙個佔位符,可以讓hibernate使用欄位的別名.
查詢返回的實體,和它的sql表的別名.
addentity()方法將sql表的別名和實體類聯絡起來,並且確定查詢結果集的形態。
addjoin()方法可以被用於載入其他的實體和集合的關聯.
list cats = sess.createsqlquery(
" select , from cats cat, cats kitten where kitten.mother = cat.id " )
.addentity( " cat " , cat. class )
.addjoin( " kitten " , " cat.kittens " )
.list();
原生的sql查詢可能返回乙個簡單的標量值或者乙個標量和實體的結合體。
double max = (double) sess.createsqlquery( " select max(cat.weight) as maxweight from cats cat " )
.addscalar( " maxweight " , hibernate.double);
.uniqueresult();
除此之外,你還可以在你的hbm檔案中描述結果集對映資訊,在查詢中使用。
list cats = sess.createsqlquery(
" select , from cats cat, cats kitten where kitten.mother = cat.id " )
.list();
命名sql查詢
可以在對映文件中定義查詢的名字,然後就可以象呼叫乙個命名的hql查詢一樣直接呼叫命名sql查詢.在這種情況下,我們不 需要呼叫addentity()方法.
< sql - query name = " persons " >
< return alias = " person " class = " eg.person " />
select person.name as ,person.age as ,person.*** as from person person where person.name like :namepattern
list people = sess.getnamedquery( " persons " ).setstring( " namepattern " , namepattern)
.setmaxresults( 50 )
.list();
Hibernate本地SQL查詢SQLQuery
使用sqlquery 對原生sql查詢執行的控制是通過sqlquery介面進行的,通過執行session.createsqlquery 獲取這個介面。最簡單的情況下,我們可以採用以下形式 list cats sess.createsqlquery select from cats addentity...
Hibernate 本地SQL查詢SQLQuery
使用sqlquery 對原生sql查詢執行的控制是通過sqlquery介面進行的,通過執行session.createsqlquery 獲取這個介面。最簡單的情況下,我們可以採用以下形式 list cats sess.createsqlquery select from cats addentity...
Hibernate本地SQL查詢SQLQuery
使用sqlquery 對原生sql查詢執行的控制是通過sqlquery介面進行的,通過執行session.createsqlquery 獲取這個介面。最簡單的情況下,我們可以採用以下形式 list cats sess.createsqlquery select from cats addentity...