作者adrianshum (Alien)
看板java
標題Re: [問題] hibernate的問題...
時間Sun Aug 10 12:15:19 2008
※ 引述《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