2012-05-04 16 views
71

Bu sorgunun varyasyonlarını denemeye devam ediyorum ve bunun gerçekleşmesi mümkün görünmüyor. Aynı zamanda bu gönderiyi de referansladım: Path Expected for Join! Nhibernate Error ve sorguma aynı mantığı uygulayamıyorum. Benim User nesnesinin bir UserGroup koleksiyonu var. Sen Kullanıcıya dernek tutan oluşumu isimlendirmek gerekirHQL HATA: Birleştirme için beklenen yol

@NamedQuery(
    name = "User.findByGroupId", 
    query = 
    "SELECT u FROM UserGroup ug " + 
    "INNER JOIN User u WHERE ug.group_id = :groupId ORDER BY u.lastname" 
) 

cevap

102
select u from UserGroup ug inner join ug.user u 
where ug.group_id = :groupId 
order by u.lastname 

: Bir varlığın diğerine HQL açıklamada

@NamedQuery(
    name = "User.findByGroupId", 
    query = 
    "SELECT u FROM UserGroup ug " + 
    "INNER JOIN ug.user u WHERE ug.group_id = :groupId ORDER BY u.lastname" 
) 

kullanın yolları. Detaylar için Hibernate documentation on HQL and joins'a bakın.

+22

Bir "yol" nedir? HQL belgelerini aradım ama bir tanım bulamadım. – gwg

+2

Bu, varlıkları birbirine bağlamanız gerektiği anlamına gelir: Yukarıdaki örnekte, ug.user u nasıl değiştirdiğine dikkat edin. Bundan önce ug olmadan hatayı alırsınız.Ayrıca, 'ug.user' içindeki 'kullanıcı', Class UserGroup'daki alanın adı olmalıdır! – Lawrence

+1

Bu HQL sözdizimi rahatsız edici. Çok fazla örnek bulup seninkini buldum. –

38

...

sorgu nesne içinde varlıkları başvurmak gerektiğini anlıyorum ama gördüğüm şey den ben. Örneğin,

hata mesajı hakkında değiştirilmiş "yol" var
... INNER JOIN ug.user u ... 

- Kullanıcı varlığa KullanıcıGrubu dan yola. bildirime hangi katılmak koşulu haritalama meta verilerinde belirtilir, JOIN üzerinde

hazırda dayanır. Bu nedenle, yerel SQL sorgusunu yolu olmadan oluşturmak imkansızdır. adlandırılmış sorguya olarak

+9

Son olarak konunun kökü ... teşekkürler, sorunumu çözdü çok (mevcut takma adı ile yabancı tablo öneki için ihtiyaç) cevaplama birisi! –

İlgili konular