HQL ERROR: Birleştirme için yol bekleniyor


100

Bu sorgunun varyasyonlarını denemeye devam ediyorum ve bunu gerçekleştiremiyorum. Bu gönderiye de başvurdum: Katılmak için Beklenen Yol! Nhibernate Error ve sorguma aynı mantığı uygulayamıyorum. Nesnemin Userbir UserGroupkoleksiyonu var.

Sorgunun nesne içindeki varlıklara başvurması gerektiğini anlıyorum, ancak gördüğüm kadarıyla ben ...

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

Yanıtlar:


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

Adlandırılmış bir sorgu olarak:

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

Bir varlıktan diğerine HQL ifadesinde yolları kullanın. Ayrıntılar için HQL ve birleşimler hakkındaki Hazırda Bekletme belgelerine bakın.


33
"Yol" nedir? HQL belgelerini araştırdım ancak bir tanım bulamadım.
gwg

7
bu varlıkları bağlamanız gerektiği anlamına gelir: yukarıdaki örneğinde, ug.user u nasıl koyduğuna dikkat edin. Önündeki ug olmadan hatayı alırsınız. Ayrıca, 'ug.user u' içindeki 'kullanıcı' Class UserGroup'daki alanın adı olmalıdır!
Lawrence

6
Bu HQL sözdizimi can sıkıcıdır. Bir sürü örnek bulmam gerekiyordu ve sizinkini buldum.
Bằng Rikimaru

Öyleyse Varlık ile bildirilen açık eşleme (birleştirmek için kullanılacak alan) olmadan varlıkları "el ile" birleştiremiyorum?
Bay Anderson

68

Kullanıcı ile ilişkilendirmeyi tutan varlığı adlandırmanız gerekir. Örneğin,

... INNER JOIN ug.user u ...

Bu, hata mesajının şikayet ettiği "yol" - Kullanıcı Grubundan Kullanıcı varlığına giden yol.

Hazırda bekletme, birleştirme koşulunun eşleme meta verilerinde bildirildiği bildirimsel JOIN'lere dayanır. Bu nedenle, yol olmadan yerel SQL sorgusunu oluşturmak imkansızdır.


13
Sonunda sorunun kökenine cevap veren biri ... (yabancı tablonun mevcut takma adla ön eklenmesi ihtiyacı) sorunumu çözdü, çok teşekkürler!
Saad Benbouzid

6
Ya: Varlık içinde bir ilişkilendirme yapmadıysanız ve 'Long userId' gibi bir şey kaydettiyseniz;
Spektakulatius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.