Hibernate本地SQL查詢SQLQuery

2021-08-29 11:42:54 字數 2008 閱讀 4106

使用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""

catandkitten")

.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

sql-

query

>

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

hibernate 本地sql查詢sqlquery 編輯 收藏使用sqlquery 對原生sql查詢執行的控制是通過sqlquery介面進行的,通過執行session.createsqlquery 獲取這個介面。最簡單的情況下,我們可以採用以下形式 list cats sess.createsqlq...