HQL多对多的查询语句
來(lái)源:http://www.blogjava.net/fuhoujun/archive/2009/01/06/232230.html
一個(gè)老師教許多學(xué)生,一個(gè)學(xué)生被許多老師教,一個(gè)學(xué)生有好多書(shū),同一種書(shū)被許多同學(xué)擁有.?
要查詢(xún)教擁有書(shū)"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ò)誤寫(xiě)法:
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屬性,所以可以寫(xiě)s.books b,最后使用b.name限制查詢(xún)b.name = 'a'.?
另外一種寫(xiě)法:
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ò)這種方式要用子查詢(xún)!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的HQL多对多的查询语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 前置摄像头在左上角的手机(前置++与后置
- 下一篇: 适合女生的相机