Re: [問題] hibernate的問題...

看板java作者 (Alien)時間17年前 (2008/08/10 12:15), 編輯推噓3(304)
留言7則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《TonyQ (沉默是金)》之銘言: : 再做一個關係有點複雜的join , : 雖然說hibernate本質不是很適合 , 不過總是想挑戰一下 . : 這篇文章我實在是猶豫了一下要發在db還是這裡 , : 不過想想還是這裡比較適合 =.=a : 前情題要如下 這是join的關係 . : Word -> Cate : ↑ : UserWord : ↓ : User : 目標是從UserWord 找出特定user所擁有的 Cate . : (都有在hbm設定join關係 , 先假設對應的成員變數都是類別開頭小寫, : 以及table名跟類別名一樣.) : 我想查詢某特定使用者 (ex sid=1) 所發表文章的所有Cate. : 這樣下是撈的到的 : return session.createQuery("select uw.word.cate from UserWord : uw where ui.user.sid=:usersid ").setParameter("usersid", userSid); : 不過我最近在練習 Criteria用法 , 所以我試著換種寫法寫 , : return session.createCriteria(UserWord.class).add( : Restrictions.eq("user.sid", userSid)).setProjection( : Projections.projectionList().add( : Property.forName("word.cate") : ) : ); : 這樣會出現 word.cate 找不到的訊息...orz : org.hibernate.QueryException: could not resolve property: word.cate : 雖然說hql是有解決 ,不過還是想知道問題點在哪 , : 不曉得有沒有前輩知道我誤用的差異點在哪@@ : 文件下午翻了好幾次也沒注意到有寫到這麼複雜的狀況@@ : http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html : 有人知道的話請讓我知道問題差在哪 困惑中...@@ 做 join 的時候要留意是 ~to-one 還是 ~to-many ~to-one 可以像你那樣寫 entity1.property2.property3 那麼 hibernate 會自動幫你做 inner join 但如果某 property 是 ~to-many 的話就要 explicitly 寫 left/right/inner join. 比如 select cate from user inner join user.words words inner join words.cate cate where user.id=? 大概這樣吧? alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.218.220.118

08/10 12:30, , 1F
問題是 to-one , 不過前輩提醒我另一個可能性,萬分感謝^^
08/10 12:30, 1F

08/10 12:59, , 2F
可是你 userword 不是 user 和 word 的 relation table
08/10 12:59, 2F

08/10 13:01, , 3F
那麼至少 user 和 word 就是 many-to-many 了?
08/10 13:01, 3F

08/10 13:26, , 4F
可是我有建立 userword的 relation object , 對userword來語
08/10 13:26, 4F

08/10 20:15, , 5F
那麼你 user -> userword 就是 one-to-many 了啦?
08/10 20:15, 5F

08/10 20:17, , 6F
噢,我看到我誤會了什麼了 :P btw, HQL 裡面寫了 ui
08/10 20:17, 6F

08/10 21:21, , 7F
哦哦!! orz 原來有type error , 修一下..
08/10 21:21, 7F
文章代碼(AID): #18dcjOqD (java)
文章代碼(AID): #18dcjOqD (java)