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[...]
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 simplementQu'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 votrec
或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 votreid
?