解決org.hibernate.QueryException illegal attempt to dereference collection 異常錯誤
阿新 • • 發佈:2019-01-29
今天做專案的時候,有兩個實體:款式、品牌兩者關係是多對多的關聯關係,實現的功能是:通過選擇款式,顯示出該款式的所有品牌。HQL語句如下:
from Brand as b where b.styles.styleId=?
執行時出現這個異常錯誤:org.hibernate.QueryException: illegal attempt to dereference collection 。
通過查資料發現,在上面的HQL語句中,Brand的關聯實體styles是一個Set集合,而不是一個Style實體。在 Hibernate3.2.2以前的版本,Hibernate 會對關聯實體自動使用隱式的inner join,也就是說使用上面的HQL語句是毫無問題的。
但是在Hibernate3.2.2版本以後,Hibernate改變了這種策略。它使用如下策略來關聯實體。
同樣對於上面的HQL語句。如果styles是一個單個的關聯實體或者是一個普通的屬性,那麼hibernate就會自動使用隱式的inner join。但是如果styles 是一個集合,那麼對不起,統將會出現 org.hibernate.QueryException: illegal attempt to dereference collection異常。
對於解決方案就是,要麼你退回hibernate3.2.2版本以前,要麼使用如下形式的 HQL語句:
from Brand as b inner join fetch b.styles as s where s.styleId=?