2009-03-11 23 views
1

私は2つのハイバネートエンティティUserとBlogを持っています。ユーザーは複数のタグに興味を持つことができます。ブログは複数のタグに属することができます。ユーザーにとって、ユーザーが興味を持っているタグに属するブログを見つけるにはどうすればよいですか?2つの1対多の関連付けの参加方法

は、私はそのSQL以外

Select * from Blog where Blog.Tags IN User.Tags 

ようなものが必要か、HQLは、IN句で、このような比較ができるようにdoesntの

現在使用してイムソリューションです: 1はデカルトでVIEWのUSER_BLOGSを生成します結合表USER_TAGSとBLOG_TAGSの積です。 2.ビューのエンティティUserBlogを定義し、HQLクエリでブログをフィルタリングするためにそれを使用する:これは一般的なシナリオです

Select * from Blog where Blog.id IN (Select blog_id from UserBlog where user_id = "CurrentUser") 

イム確認してください。これには純粋なHibernateまたはHQLソリューションがありますか?

+0

ユーザーとタグは保存されていますか? – slashmais

+0

2つの結合テーブルBLOG_TAGSとUSER_TAGSに、別のテーブルにTAGSを追加しました。 – Sathish

答えて

1

このようなものをお探しですか?コメントに反し

select b.* 
    from blog b 
    join blog_tags bt on bt.blog_id = b.id 
    join user_tags ut on ut.tag = bt.tag 
    where ut.user_id = (this_user) 

は、私はHQLは(私が間違っていることが、http://www.hibernate.org/hib_docs/reference/en/html/queryhql-joins.htmlを参照のこと)明示的な許可が参加してい信じます。どんな場合でも、明示的な結合なしで行うことができます:

select b.* 
    from blog b, blog_tags bt, user_tags ut 
    where ut.user_id = (this_user) 
    and bt.blog_id = b.id 
    and ut.tag  = bt.tag 
+0

Hibernateが明示的にHQLでJoinテーブルを受け入れない点を除いて、SQLでかなりよくまとめられています。 – Sathish

+0

それは本当ですか? http://www.hibernate.org/hib_docs/reference/en/html/queryhql-joins.htmlを参照してください。 – MarkusQ

0

MarkusQのソリューションでは、UserTagやBlogTagなどの結合テーブルのエンティティをHQLクエリで使用する必要がありました。

私の以前のUSER_BLOGSビューの作成方法は低すぎました。

これは、任意の追加の実体なしで働いていたHQLクエリです:あなたはこのまたはより良い解決策で問題を見つけた場合

select b.* from Blog blog, User user, Tag tag 
where tag in elements (user.tags) 
and tag in elements (blog.tags) 
and user.id = (current_user) 

、あなたの答えを投稿してくださいブログとタグの間の関係はどのように

関連する問題