Hibernate HQL一對多 在一方的查詢

首先說一句:是版本的問題!fetch

在多對多或者多對一,從一中查找多中查詢某些語句時容易出現hibernate

我寫的hql爲:blog

from Department as d where d.employees.name='Tom';ci

運行時出現異常:org.hibernate.QueryException: illegal attempt to dereference collectionit

是由於:在上面的HQL語句中,Department的關聯實體employees是一個集合,而不直接是一個Employee實體。io

在Hibernate3.2.2之前的版本,Hibernate會對關聯實體自動使用隱式的inner join,im

也就是說以下SQL語句不會有任何問題 :from Department as d where d.employees.name='Tom';查詢

從Hibernate3.2.3之後,Hibernate改變了這種隱式的inner join的策略異常

對於以下這條語句:static

from Department as d where d.employees.name='Tom';

若是employees是普通組件屬性,或單個的關聯實體,則Hibernate會自動生成隱式的inner join

若是myEvents是也一個集合,那麼對不起!系統將會出現 org.hibernate.QueryException: illegal attempt to dereference collection異常。
據Hibernate官方說法: 
這樣可讓這使得隱含關聯更具肯定性(原文:This makes implicit joins more deterministic )。

推薦這樣寫:

from Department as d inner join fetch d.employees e where e.name='Tom';

 

源自:http://lishibo613.blog.163.com/blog/static/116100391201010114314573/

相關文章
相關標籤/搜索