看板 java 關於我們 聯絡資訊
※ 引述《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
TonyQ:問題是 to-one , 不過前輩提醒我另一個可能性,萬分感謝^^ 08/10 12:30
adrianshum:可是你 userword 不是 user 和 word 的 relation table 08/10 12:59
adrianshum:那麼至少 user 和 word 就是 many-to-many 了? 08/10 13:01
TonyQ:可是我有建立 userword的 relation object , 對userword來語 08/10 13:26
adrianshum:那麼你 user -> userword 就是 one-to-many 了啦? 08/10 20:15
adrianshum:噢,我看到我誤會了什麼了 :P btw, HQL 裡面寫了 ui 08/10 20:17
TonyQ:哦哦!! orz 原來有type error , 修一下.. 08/10 21:21