Hibernate多對多查詢

2021-08-26 19:45:39 字數 799 閱讀 6189

乙個老師教許多學生,乙個學生被許多老師教,乙個學生有好多書,同一種書被許多同學擁有.

要查詢教擁有書"a"的學生的老師!

hql如何寫呀?如何取值?

classteacher

classstudent

classbook

hql語句:

select t from teacher t join t.students s join s.books b where b.name = 'a'

解釋:t.students s中s並不是集合的意思,而是t的students物件的表別名,join t.students s這個hql,hibernate會翻譯成兩個表的內連線關係

錯誤寫法:

select t from teacher t where t.students.books.name = 'a'

其實道理是很顯然的,t.students是乙個set,那麼這個set怎麼可能有books這樣的屬性呢?同理books.name也不對,所以使用表間連線並給出別名t.students s,此時的物件s才有books屬性,所以可以寫s.books b,最後使用b.name限制查詢b.name = 'a'.

另外一種寫法:

select t from teacher t,student s,book b where s.id in elements(t.students) and b.id in elements(s.books)

這種方法沒有出錯!不過這種方式要用子查詢!但是mysql並不支援子查詢,為了通用性,選擇第一種做法。

未完,待續...

**:

hibernate的多對多

近日工作中遇到多對多,以前未曾用過hibernate,這次也算是摸著石頭過河。之前試驗了級聯的cascadetype.all,卻發現當刪除部門表的時候,中間表資料刪除了,結果將人員表相關聯的資料也全部刪除了。後來將級聯改為cascadetype.persist,cascadetype.merge,倒...

hibernate的多對多

1.herbernate一對多自關聯 樹形選單查詢可能出現的問題 當載入一級節點的時候沒問題 強制載入 載入二級載入時候,由於設定了強制載入,同樣可以載入出所有的二級節點。沒問題 載入 節點時,這是session關閉了,並且預設採用的是懶載入 許可權選單載入有兩種方式 1 一次性將資料庫表中的資料全...

hibernate的多對多

多對多關聯是hibernate中一種比較特殊的關聯,它需要借助中間表來完成多對多資訊的儲存。多對多關聯只有雙向關聯。資料庫的多對多 資料庫中不能直接對映多對多 處理 建立乙個橋接表 中間表 將乙個多對多關係轉換成兩個一對多。hibernate的多對多 hibernate可以直接對映多對多關聯關係 看...