Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

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

          我寫的hql為:

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

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

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

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

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

          從 Hibernate3.2.3以后,Hibernate改變了這種隱式的inner join的策略

          對于如下這條語句:

          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';
          posted on 2010-04-23 22:44 seal 閱讀(3336) 評論(0)  編輯  收藏 所屬分類: HibernateEJB
          主站蜘蛛池模板: 金堂县| 新丰县| 遂平县| 阳信县| 湖口县| 陆川县| 新安县| 鲜城| 龙胜| 黄陵县| 宿州市| 波密县| 宣城市| 错那县| 潼南县| 钟山县| 灵丘县| 北票市| 新巴尔虎左旗| 阳曲县| 连城县| 乌兰浩特市| 宿松县| 灯塔市| 洞头县| 荃湾区| 泾阳县| 湟源县| 博罗县| 罗田县| 滕州市| 隆子县| 五常市| 湟中县| 张家港市| 白沙| 汪清县| 扶余县| 贵港市| 龙川县| 仪陇县|