一個(gè)老師教許多學(xué)生,一個(gè)學(xué)生被許多老師教,一個(gè)學(xué)生有好多書,同一種書被許多同學(xué)擁有.
要查詢教擁有書"a"的學(xué)生的老師!
Hql語(yǔ)句:
SELECT t FROM Teacher t join t.students s join s.books b where b.name = 'a'
解釋:t.students s中s并不是集合的意思,而是t的students對(duì)象的表別名,join t.students s這個(gè)hql,hibernate會(huì)翻譯成兩個(gè)表的內(nèi)連接關(guān)系
錯(cuò)誤寫法:
SELECT t FROM teacher t where t.students.books.name = 'a'
其實(shí)道理是很顯然的,t.students是一個(gè)Set,那么這個(gè)Set怎么可能有books這樣的屬性呢?同理books.name也不對(duì),所以使用表間連接并給出別名t.students s,此時(shí)的對(duì)象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)
這種方法沒(méi)有出錯(cuò)!不過(guò)這種方式要用子查詢!
posted on 2008-10-03 18:26
Loy Fu 閱讀(7117)
評(píng)論(1) 編輯 收藏 所屬分類:
jpa