Désactiver la requête de connexion locale pour Hibernate NonUniqueDiscoveredSqlAliasException
P粉852114752
P粉852114752 2024-02-21 13:50:47
0
1
451

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粉852114752
P粉852114752

répondre à tous(1)
P粉546138344

Voulez-vous vraiment toutes les colonnes de employeecba ? 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 à idarw_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 cba 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 ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal