Hibernate進行時

          有關Hibenrate及其相關工具的主頁
          隨筆 - 0, 文章 - 16, 評論 - 29, 引用 - 0
          數據加載中……

          關于條件查詢detachedCriteria的一點體會

          假設要通過stuName查詢一個學生Student記錄,可以如下:
          ?DetachedCriteria?dc?=?DetachedCriteria.forClass(Student.class);
          ??? dc.add(Restrictions.like("stuName", stuName, MatchMode.ANYWHERE));
          ??????

          ?如果要通過Student的Team的teamName查詢一個Student記錄,很多人都會這么寫:
          ?DetachedCriteria?dc?=?DetachedCriteria.forClass(Student.class);
          ??? dc.add(Restrictions.like("team.teamName", teamName, MatchMode.ANYWHERE));
          ??????

          遺憾的是上述程序報錯,說是在Student中找不到team.teamName屬性,這是可以理解的。那么如何通過teamName查找Student呢?
          可以這么寫:
          ?DetachedCriteria?dc?=?DetachedCriteria.forClass(Student.class);
          ??? dc.createAlias("team", "t");
          ??? dc.add(Restrictions.like("t.teamName", teamName, MatchMode.ANYWHERE));
          ??????
          沒錯,就是要先建立team的引用,才能用team導航到teamName。

          這里有一個特殊情況,如果是對引用對象的id查詢,則可以不用建立引用,也就是可以不調用createAlias()語句,如下所示:
          ?DetachedCriteria?dc?=?DetachedCriteria.forClass(Student.class);
          ??? dc.add(Restrictions.like("team.id", teamId, MatchMode.ANYWHERE));
          ??????
          據我個人的經驗,team后只能跟其主鍵屬性,比較其他屬性要用別名。此主鍵屬性可以用“id”字符來指代,也可以用team的主鍵屬性來指代。換句話說,我的Student類的類主鍵“stuId”,不管是在HQL還是在QBC中,都可以用stu.id來指代stu.stuId。在這里可以看出“id”字符的特殊性。上述是個人觀點,并未得到確實的證實。

          posted on 2006-07-28 17:36 caixuetao 閱讀(4806) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 尼玛县| 精河县| 民乐县| 霍山县| 扎鲁特旗| 鹿邑县| 保亭| 长春市| 司法| 太仆寺旗| 渑池县| 樟树市| 宜春市| 临海市| 高州市| 阿图什市| 黑河市| 分宜县| 衡山县| 安远县| 陆川县| 峡江县| 金华市| 三河市| 德钦县| 镇康县| 永泰县| 阿图什市| 同心县| 婺源县| 凉城县| 海口市| 连山| 荆州市| 祁连县| 临城县| 长垣县| 天柱县| 青海省| 波密县| 阿图什市|