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

Più di una tabella trovata nello spazio dei nomi (, ) - SchemaExtractionException

Ho avuto lo stesso problema e sono stato in grado di approfondire il codice per scoprire la causa, almeno nel mio caso. Non so se sarà lo stesso problema per te, ma questo potrebbe essere utile.

Dalla traccia dello stack posso vedere che hai impostato hibernate.hbm2ddl.auto per aggiornare lo schema. Come parte di questo, sta cercando di cercare i metadati per tutte le tabelle che Hibernate conosce e per una di esse sta ottenendo una risposta ambigua perché la query sui metadati restituisce più di una singola riga di tabella o visualizza i metadati.

Nel mio caso ciò è stato causato dalla nostra convenzione di denominazione per le tabelle. Avevamo un tavolo chiamato (diciamo) "AAA_BBB" per il quale stava andando storto. Ora l'uso di un trattino basso nel nome della tabella è perfettamente accettabile per quanto ne so ed è una pratica abbastanza comune. Tuttavia, il carattere di sottolineatura è anche il carattere jolly SQL per un singolo carattere; cercando nel codice per i metadati del database, posso vedere che sta facendo un "WHERE table_name LIKE ..." nel metodo DatabaseMetaData.getTables(...), che è ciò che hibernate sta usando qui.

Ora, nel mio schema avevo anche una seconda tabella chiamata "AAA1BBB" e quindi entrambe corrispondevano alla ricerca dei metadati e quindi ha restituito una riga di metadati per ciascuna di queste tabelle. Il metodo di ibernazione viene scritto per cadere se il set di risultati dalla ricerca dei metadati della tabella restituisce più di una riga. Immagino che dovrebbe esaminare le righe disponibili e trovare se ce n'è una che corrisponde esattamente al nome della tabella specificato.

L'ho testato sia per Oracle che per MySQL con lo stesso risultato.