inner join(內連接) left outer join(左外連接) right outer join(右外連接) full join (全連接,並不常用) HQL中的條件用with即:left join ... with...
SQL中的條件用on即:left join ... on...
語句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%''
