Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Mehr als eine Tabelle im Namespace gefunden (, ) - SchemaExtractionException

Ich hatte das gleiche Problem und konnte zumindest in meinem Fall den Code durchsuchen, um die Ursache herauszufinden. Ich weiß nicht, ob es bei Ihnen dasselbe Problem geben wird, aber dies könnte hilfreich sein.

Aus Ihrem Stack-Trace kann ich sehen, dass Sie die hibernate.hbm2ddl.auto eingestellt haben, um das Schema zu aktualisieren. Als Teil davon versucht es, die Metadaten für alle Tabellen nachzuschlagen, die Hibernate kennt, und für eine von ihnen erhält es eine mehrdeutige Antwort, da die Metadatenabfrage mehr als eine einzelne Zeile von Tabellen- oder Ansichtsmetadaten zurückgibt.

In meinem Fall wurde dies durch unsere Namenskonvention für Tabellen verursacht. Wir hatten einen Tisch namens (sagen wir) "AAA_BBB", für den dies schief lief. Nun ist die Verwendung eines Unterstrichs im Tabellennamen meines Wissens durchaus akzeptabel und durchaus üblich. Der Unterstrich ist jedoch auch der SQL-Platzhalter für ein einzelnes Zeichen; Wenn ich im Code nach den Datenbank-Metadaten suche, kann ich sehen, dass es ein "WHERE table_name LIKE ..." in der DatabaseMetaData.getTables(...)-Methode ausführt, was Hibernate hier verwendet.

Jetzt hatte ich in meinem Schema auch eine zweite Tabelle mit dem Namen "AAA1BBB", und daher stimmten beide mit der Metadatensuche überein und es wurde eine Metadatenzeile für jede dieser Tabellen zurückgegeben. Die Hibernate-Methode ist so geschrieben, dass sie einfach herunterfällt, wenn die Ergebnismenge der Tabellenmetadatensuche mehr als eine Zeile zurückgibt. Ich würde vermuten, dass es die verfügbaren Zeilen untersuchen und herausfinden sollte, ob es eine gibt, die genau mit dem angegebenen Tabellennamen übereinstimmt.

Ich habe dies sowohl für Oracle als auch für MySQL mit dem gleichen Ergebnis getestet.