Oracle
 sql >> Base de données >  >> RDS >> Oracle

Plus d'une table trouvée dans l'espace de noms (, ) - SchemaExtractionException

J'ai eu le même problème et j'ai pu creuser jusqu'au code pour trouver la cause, du moins dans mon cas. Je ne sais pas si ce sera le même problème pour vous, mais cela peut être utile.

À partir de votre trace de pile, je peux voir que vous avez défini hibernate.hbm2ddl.auto pour mettre à niveau le schéma. Dans ce cadre, il essaie de rechercher les métadonnées de toutes les tables connues par hibernate et, pour l'une d'entre elles, d'obtenir une réponse ambiguë car la requête de métadonnées renvoie plus d'une seule ligne de métadonnées de table ou de vue.

Dans mon cas, cela a été causé par notre convention de nommage pour les tables. Nous avions une table appelée (disons) "AAA_BBB" pour laquelle cela n'allait pas. Maintenant, l'utilisation d'un trait de soulignement dans le nom de la table est parfaitement acceptable pour autant que je sache et est une pratique assez courante. Cependant, le trait de soulignement est également le caractère générique SQL pour un seul caractère ; en regardant dans le code des métadonnées de la base de données, je peux voir qu'il fait un "WHERE table_name LIKE ..." dans la méthode DatabaseMetaData.getTables(...) , qui est ce que hibernate utilise ici.

Maintenant, dans mon schéma, j'avais également une deuxième table appelée "AAA1BBB" et, par conséquent, les deux correspondaient à la recherche de métadonnées et renvoyaient donc une ligne de métadonnées pour chacune de ces tables. La méthode hibernate est écrite pour tomber simplement si le jeu de résultats de la recherche de métadonnées de table renvoie plus d'une ligne. Je suppose qu'il devrait examiner la ou les lignes disponibles et trouver s'il y en a une qui correspond exactement au nom de table spécifié.

J'ai testé cela pour Oracle et MySQL avec le même résultat.