Rumah > Soal Jawab > teks badan
Saya ingin menyertai beberapa jadual menggunakan pertanyaan asli dalam Spring Boot. Pertanyaannya kelihatan seperti ini:
SELECT * FROM employee AS e INNER JOIN c ON e.id = c.employee_id INNER JOIN b ON c.arw_id = b.arw_id INNER JOIN a ON b.ap_id = a.id
Kini, saya mempunyai entiti dalam [id]
和 [arw_id]
上收到 Hibernate NonUniqueDiscoveredSqlAliasException。我可以使用 using
注释修复第二个,但是表的 id
dan saya benar-benar tidak mahu menukar nama mereka...
Sebarang cadangan atau pepijat Hibernate?
Sekian, Niklas
EDIT: Untuk menjelaskan: mesej ralat pertama yang saya dapat ialah Encountered a duplicated sql alias [arw_id] during auto-discovery of a native-sql query;嵌套异常是 org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasExce[...]
.
Kemudian saya menukar pertanyaan kepada:
SELECT * FROM employee AS e INNER JOIN c ON e.id = c.employee_id INNER JOIN b ON USING (arw_id) INNER JOIN a ON b.ap_id = a.id
Dan ralat berikut muncul:
在自动发现本机 SQL 查询期间遇到重复的 sql 别名 [id];嵌套异常是 org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasExce[...]
P粉5461383442024-02-22 10:55:47
Adakah anda benar-benar mahukan semua lajur daripada employee
、c
、b
和 a
?
Apa yang anda tukarkan hasilnya?
Jika anda ingin menukarnya kepada Employee
kelas, gunakan sahaja
SELECT e.* FROM employee AS e INNER JOIN c ON e.id = c.employee_id INNER JOIN b ON c.arw_id = b.arw_id INNER JOIN a ON b.ap_id = a.id
Apakah yang membuatkan anda yakin bahawa ralat yang anda terima adalah disebabkan oleh id
和 arw_id
?
Ia adalah medan yang berbeza dan ia tidak sepatutnya memberi anda ralat yang anda nyatakan. Atau ini berkemungkinan besar kerana anda mempunyai nama lajur yang sama dalam c
或 b
或 a
anda
Dalam kes ini, nama lajur anda menjadi samar-samar.
Adalah lebih jelas jika anda boleh menunjukkan kepada kami sekeping kod tempat anda menggunakan pertanyaan ini
Edit
Seperti yang saya lihat, semua yang anda lakukan ialah menggunakan kejadian berulang USING
而不是 ON
。这意味着您在两个表之间共享您的arw_id
,这将消除结果集中arw_id
.
Jika ini adalah kes yang sama dengan id anda, mengapa tidak lakukan perkara yang sama dengan id
anda?