sql >> Database teknologi >  >> RDS >> Oracle

Mere end én tabel fundet i navneområdet (, ) - SchemaExtractionException

Jeg har haft det samme problem og var i stand til at grave ned til koden for at finde ud af årsagen, i hvert fald i mit tilfælde. Jeg ved ikke, om det vil være det samme problem for dig, men dette kan være nyttigt.

Fra din stack-sporing kan jeg se, at du har hibernate.hbm2ddl.auto indstillet til at opgradere skemaet. Som en del af dette forsøger den at slå metadataene op for alle de tabeller, som hibernate kender til, og for en af ​​dem at få et tvetydigt svar, fordi metadataforespørgslen returnerer mere end en enkelt række med tabel- eller visningsmetadata.

I mit tilfælde var dette forårsaget af vores navngivningskonvention for tabeller. Vi havde et bord kaldet (f.eks.) "AAA_BBB", som det gik galt for. Nu er brugen af ​​en understregning i tabelnavnet helt acceptabel, så vidt jeg ved, og er ganske almindelig praksis. Men understregningen er også SQL-jokertegnet for et enkelt tegn; kigger i koden til databasens metadata, kan jeg se, at den laver en "WHERE table_name LIKE ..." i DatabaseMetaData.getTables(...)-metoden, hvilket er hvad hibernate bruger her.

I mit skema havde jeg også en anden tabel kaldet "AAA1BBB", og derfor matchede begge disse metadataopslag, og så den returnerede en metadatarække for hver af disse tabeller. Hibernate-metoden er skrevet til bare at falde ned, hvis resultatsættet fra tabelmetadataopslaget returnerer mere end én række. Jeg vil gætte på, at den bør undersøge de(n) tilgængelige række(r) og finde ud af, om der er en, der er et nøjagtigt match med det angivne tabelnavn.

Jeg testede dette for både Oracle og MySQL med samme resultat.



  1. Hvornår skal man bruge utf-8, og hvornår skal man bruge latin1 i MySQL?

  2. Optimeret SQL til træstrukturer

  3. Vælg en værdi fra en specifik tabel med `where`-sætning på en anden tabel

  4. Brug BLOB eller VARBINARY til krypterede data i MySQL?