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[...]
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 sahajaApakah 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 dalamc
或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 denganid
anda?