作者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
1F:推 TonyQ:问题是 to-one , 不过前辈提醒我另一个可能性,万分感谢^^ 08/10 12:30
2F:→ adrianshum:可是你 userword 不是 user 和 word 的 relation table 08/10 12:59
3F:→ adrianshum:那麽至少 user 和 word 就是 many-to-many 了? 08/10 13:01
4F:推 TonyQ:可是我有建立 userword的 relation object , 对userword来语 08/10 13:26
5F:→ adrianshum:那麽你 user -> userword 就是 one-to-many 了啦? 08/10 20:15
6F:→ adrianshum:噢,我看到我误会了什麽了 :P btw, HQL 里面写了 ui 08/10 20:17
7F:推 TonyQ:哦哦!! orz 原来有type error , 修一下.. 08/10 21:21