HQL ERROR: Path diharapkan untuk bergabung


100

Saya terus mencoba variasi dari kueri ini dan sepertinya tidak dapat mewujudkannya. Saya juga mereferensikan posting ini: Jalur yang Diharapkan untuk Bergabung! Kesalahan Nhibernate dan sepertinya tidak dapat menerapkan logika yang sama ke kueri saya. UserObjek saya memiliki UserGroupkoleksi.

Saya memahami bahwa kueri perlu merujuk entitas di dalam objek, tetapi dari apa yang saya lihat, saya ...

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

Jawaban:


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

Sebagai kueri bernama:

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

Gunakan jalur dalam pernyataan HQL, dari satu entitas ke entitas lainnya. Lihat dokumentasi Hibernate di HQL dan bergabung untuk detailnya.


32
Apa itu "jalan"? Saya mencari dokumentasi HQL tetapi tidak menemukan definisi.
gwg

7
itu berarti Anda perlu menautkan entitas: dalam contoh di sini di atas, perhatikan bagaimana dia menempatkan ug.user u. Tanpa ug sebelumnya, Anda akan mendapatkan error. Juga, 'user' di 'ug.user u' harus menjadi nama field di Class UserGroup!
Lawrence

6
Sintaks HQL ini mengganggu. Saya harus menemukan banyak contoh dan menemukan contoh Anda.
Bằng Rikimaru

Maka saya tidak dapat menggabungkan entitas "secara manual" tanpa pemetaan eksplisit (bidang yang akan digunakan untuk bergabung) yang dideklarasikan dengan Entitas?
Tn. Anderson

67

Anda perlu memberi nama entitas yang memegang asosiasi ke Pengguna. Sebagai contoh,

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

Itulah "jalur" yang dikeluhkan oleh pesan kesalahan - jalur dari UserGroup ke entitas Pengguna.

Hibernate bergantung pada deklaratif JOIN, yang kondisi penggabungannya dinyatakan dalam metadata pemetaan. Inilah sebabnya mengapa tidak mungkin membuat kueri SQL asli tanpa jalur.


13
Akhirnya seseorang menjawab akar masalah ... (kebutuhan untuk mengawali tabel asing dengan alias yang ada) memecahkan masalah saya, terima kasih banyak!
Saad Benbouzid

6
Bagaimana jika: Anda tidak membuat asosiasi dalam Entitas dan hanya menyimpan sesuatu seperti 'Long userId;'
Spektakulatius
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.