1. 程式人生 > >解決org.hibernate.QueryException illegal attempt to dereference collection 異常錯誤

解決org.hibernate.QueryException illegal attempt to dereference collection 異常錯誤

          今天做專案的時候,有兩個實體:款式、品牌兩者關係是多對多的關聯關係,實現的功能是:通過選擇款式,顯示出該款式的所有品牌。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=?