Sealyu

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

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

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

          我寫的hql為:

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

          運(yùn)行時出現(xiàn)異常:org.hibernate.QueryException: illegal attempt to dereference collection

          是因?yàn)椋涸谏厦娴腍QL語句 中,Department的關(guān)聯(lián)實(shí)體employees是一個集合,而不直接是一個Employee實(shí)體。

          在 Hibernate3.2.2以前的版本,Hibernate會對關(guān)聯(lián)實(shí)體自動使用隱式的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是普通組件屬 性,或單個的關(guān)聯(lián)實(shí)體,則Hibernate會自動生成隱式的inner join

          如果myEvents是也一個集合,那么對不起!系 統(tǒng)將會出現(xiàn) org.hibernate.QueryException: illegal attempt to dereference collection異常。
          據(jù)Hibernate官方說法:
          這樣可以讓這使得隱含關(guān)聯(lián)更具確定性(原文: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 閱讀(3335) 評論(0)  編輯  收藏 所屬分類: HibernateEJB
          主站蜘蛛池模板: 鄢陵县| 密山市| 衡南县| 青浦区| 宁乡县| 永顺县| 读书| 富民县| 连城县| 邵阳县| 永康市| 天全县| 新源县| 青河县| 望都县| 深州市| 上蔡县| 西畴县| 雷波县| 云浮市| 昭觉县| 商水县| 揭阳市| 岱山县| 新营市| 科技| 西充县| 涡阳县| 满洲里市| 寿阳县| 汾阳市| 宁明县| 泉州市| 花莲县| 湖口县| 邛崃市| 承德市| 依兰县| 贵港市| 平果县| 千阳县|