使用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
hibernate 本地sql查詢sqlquery 編輯 收藏使用sqlquery 對原生sql查詢執行的控制是通過sqlquery介面進行的,通過執行session.createsqlquery 獲取這個介面。最簡單的情況下,我們可以採用以下形式 list cats sess.createsqlq...
Hibernate本地SQL查詢SQLQuery
使用sqlquery 對原生sql查詢執行的控制是通過sqlquery介面進行的,通過執行session.createsqlquery 獲取這個介面。最簡單的情況下,我們可以採用以下形式 list cats sess.createsqlquery select from cats addentity...