Maison  >  Questions et réponses  >  le corps du texte

Désactiver la requête de connexion locale pour Hibernate NonUniqueDiscoveredSqlAliasException

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粉852114752P粉852114752241 Il y a quelques jours413

répondre à tous(1)je répondrai

  • P粉546138344

    P粉5461383442024-02-22 10:55:47

    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 ?

    répondre
    0
  • Annulerrépondre