Hibernate 本地SQL查詢SQLQuery

2021-08-26 09:11:38 字數 1789 閱讀 8674

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...