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 閱讀(3344) 評論(0)  編輯  收藏 所屬分類: HibernateEJB
          主站蜘蛛池模板: 北安市| 中卫市| 株洲市| 新巴尔虎右旗| 都安| 荔波县| 长阳| 寿光市| 兰考县| 鹤岗市| 庆安县| 淮滨县| 清水县| 响水县| 河西区| 军事| 墨竹工卡县| 广东省| 开原市| 景德镇市| 民权县| 家居| 房山区| 天峨县| 汝阳县| 山阴县| 得荣县| 大同县| 徐闻县| 北安市| 万宁市| 广灵县| 乳山市| 山丹县| 丰原市| 孝义市| 昌图县| 连城县| 会理县| 陆河县| 勐海县|