inner
join
(內連線)
left outer
join
(左外連線)
right outer
join
(右外連線)
full
join
(全連線,並不常用)
sql中的條件用
on
即:left
join
...
on
...
hql中的條件用with即:left
join
... with...
語句inner
join
, left outer
join
以及 right outer
join
可以簡寫。
from
cat
as
cat
join
cat.mate
as
mate left
join
cat.kittens
as
kitten
通過hql的with關鍵字,你可以提供額外的
join
條件。
from
cat
as
cat left
join
cat.kittens
as
kitten with kitten.bodyweight > 10.0
還有,乙個
"fetch"
連線允許僅僅使用乙個選擇語句就將相關聯的物件或一組值的集合隨著他們的父物件的初始化而被初始化,這種方法在使用到集合的情況下尤其有用,對於關聯和集合來說,它有效的代替了對映檔案中的外聯接 與延遲宣告(lazy declarations).
from
cat
as
cat inner
join
fetch cat.mate left
join
fetch cat.kittens
乙個fetch連線通常不需要被指定別名, 因為相關聯的物件不應當被用在
where
子句 (或其它任何子句)中。同時,相關聯的物件 並不在查詢的結果中直接返回,但可以通過他們的父物件來訪問到他們。
from
cat
as
cat inner
join
fetch cat.mate left
join
fetch cat.kittens child left
join
fetch child.kittens
假若使用iterate()來呼叫查詢,請注意fetch構造是不能使用的(scroll() 可以使用)。fetch也不應該與setmaxresults() 或setfirstresult()共用,這是因為這些操作是基於結果集的,而在預先抓取集合類時可能包含重複的資料,也就是說無法預先知道精確的行數。fetch還不能與獨立的 with條件一起使用。通過在一次查詢中fetch多個集合,可以製造出笛卡爾積,因此請多加注意。對bag對映來說,同時
join
fetch多個集合角色可能在某些情況下給出並非預期的結果,也請小心。最後注意,使用full
join
fetch 與 right
join
fetch是沒有意義的。
如果你使用屬性級別的延遲獲取(lazy fetching)(這是通過重新編寫位元組碼實現的),可以使用 fetch all properties 來強制hibernate立即取得那些原本需要延遲載入的屬性(在第乙個查詢中)。
from
document fetch all properties order
by
name
from
document doc fetch all properties
where
lower(doc.name) like
''
%cats%
''
hibernate多表查詢
在沒有使用select的時候,返回的是乙個 student物件,否則返回的是乙個物件陣列 object ilist userlist session.find from testmssql.student as student where student.name 張三 nhibernate.nhi...
Hibernate之多表查詢
原生sql多表查詢 1.交叉連線 笛卡爾積 select from a,b 2.內連線 1 隱式內連線 select from a,b where b.aid a.id 2 顯示內連線 select from a inner join b on b.aid a.id 3.外鏈結 1 左外連線 sel...
Hibernate多表查詢結果處理
如果我們在hibernate中需要查詢多個表的不同字段,那麼如何來獲取hibernate多表查詢的結果呢?有兩種方式 1 對各個字段分別轉化成對應型別,如下 query q session.createquery select members,classinfo.classname from mem...