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