Maison > Questions et réponses > le corps du texte
Je souhaite rejoindre certaines tables à l'aide de requêtes natives dans Spring Boot. La requête ressemble à ceci :
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
Maintenant, j'ai des entités en [id]
和 [arw_id]
上收到 Hibernate NonUniqueDiscoveredSqlAliasException。我可以使用 using
注释修复第二个,但是表的 id
et je n'ai vraiment pas envie de changer leurs noms...
Des suggestions ou un bug d'hibernation ?
Bravo, Nicolas
EDIT : Pour clarifier : le premier message d'erreur que j'ai reçu était Encountered a duplicated sql alias [arw_id] during auto-discovery of a native-sql query;嵌套异常是 org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasExce[...]
.
Ensuite, j'ai changé la requête en :
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
Et l'erreur suivante apparaît :
在自动发现本机 SQL 查询期间遇到重复的 sql 别名 [id];嵌套异常是 org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasExce[...]
P粉5461383442024-02-22 10:55:47
Voulez-vous vraiment toutes les colonnes de employee
、c
、b
和 a
?
En quoi convertissez-vous le résultat ?
Si vous souhaitez le convertir en classe Employee
, utilisez simplement
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
Qu'est-ce qui vous fait croire que l'erreur que vous recevez est due à id
和 arw_id
?
Ce sont des champs différents et ils ne devraient pas vous donner l'erreur que vous avez mentionnée. Ou c'est probablement parce que vous avez les mêmes noms de colonnes dans votre c
或 b
或 a
Dans ce cas, les noms de vos colonnes deviennent ambigus.
Ce serait plus clair si vous pouviez nous montrer un morceau de code dans lequel vous utilisez cette requête
Modifier
À mon avis, tout ce que vous faites est d'utiliser des occurrences récurrentes de USING
而不是 ON
。这意味着您在两个表之间共享您的arw_id
,这将消除结果集中arw_id
.
Si c'est le même cas avec votre identifiant, pourquoi ne pas faire de même avec votre id
?