2009-03-11 15 views
1

İki hazırda bekleme var. Kullanıcı ve Blog. Kullanıcı birden çok Etiketle ilgilenebilir. Blog, birden çok Etikete ait olabilir. Bir Kullanıcı için, Kullanıcı'nın ilgilendiği Etiketlere ait Blogları nasıl bulabilirim?Pek çok dernek için İki Birleşmeye Nasıl Katılır?

O SQL hariç

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

gibi bir şey gerekir veya HQL IN yan tümcesinde böyle kıyaslamalar izin doesnt

anda kullanarak im bir çözümdür: 1. kartezyen bir GÖRÜNÜM USER_BLOGS üret USER_TAGS ve BLOG_TAGS birleştirme tablolarının ürünü. 2. Görünüm için bir Varlık UserBlog tanımlamak ve HQL sorguda Bloglar filtrelemek için kullanabilirsiniz: Bu yaygın bir senaryo

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

eminim. Bunun için saf bir Hibernate veya HQL çözümü var mı?

+0

ve kullanıcı ve etiketler depolandı? – slashmais

+0

, ayrı bir tabloda iki TAG_TAGS ve TAGS ile USER_TAGS birleşim tablolarında. – Sathish

cevap

1

Böyle bir şey mi arıyorsunuz? yorumun aksine

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) 

, ben HQL (Ben yanlış olabilir, ama http://www.hibernate.org/hib_docs/reference/en/html/queryhql-joins.html görebilirsiniz) açık izin katılır yapar inanıyoruz. Herhangi bir durumda, açıkça katılmadan yapılabilir:

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

SQL'de oldukça iyi toplanmış, ancak Hazırda Bekletme, HQL'de birleşim tablolarını açıkça kabul etmiyor. – Sathish

+0

Bundan emin misin? Http://www.hibernate.org/hib_docs/reference/en/html/queryhql-joins.html sayfasına bakın. – MarkusQ

0

MarkusQ'nun çözümü için, HQL sorgusunda kullanmak üzere UserTag ve BlogTag gibi birleşim tabloları için varlık bildirmek zorunda kaldım.

Önceki USER_BLOGS görünümü oluşturma çözümüm çok yavaştı.

Bu herhangi bir ek kurumlar olmadan çalıştı HQL sorgusu: Bu ya da daha iyi çözümlerinde herhangi bir sorun bulursanız

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) 

, cevaplarınızı gönderin blog ve etiketleri arasındaki ilişkiler ne kadar

İlgili konular