sql >> Databáze >  >> RDS >> Oracle

V oboru názvů (, ) byla nalezena více než jedna tabulka - SchemaExtractionException

Měl jsem stejný problém a byl jsem schopen vykopat kód, abych zjistil příčinu, alespoň v mém případě. Nevím, zda to bude pro vás stejný problém, ale může to být užitečné.

Z vašeho trasování zásobníku vidím, že máte nastaven hibernate.hbm2ddl.auto na upgrade schématu. V rámci toho se snaží vyhledat metadata pro všechny tabulky, o kterých hibernace ví, a pro jednu z nich získat nejednoznačnou odpověď, protože dotaz na metadata vrací více než jeden řádek tabulky nebo metadata zobrazení.

V mém případě to bylo způsobeno naší konvencí pojmenování tabulek. Měli jsme stůl nazvaný (řekněme) "AAA_BBB", u kterého se to nepovedlo. Nyní je použití podtržítka v názvu tabulky, pokud vím, naprosto přijatelné a je zcela běžnou praxí. Nicméně podtržítko je také zástupný znak SQL pro jeden znak; když hledám v kódu metadata databáze, vidím, že to dělá "WHERE table_name LIKE ..." v metodě DatabaseMetaData.getTables(...), kterou zde používá hibernace.

Nyní jsem ve svém schématu měl také druhou tabulku nazvanou „AAA1BBB“, a proto obě odpovídaly vyhledávání metadat, a tak vrátil řádek metadat pro každou z těchto tabulek. Metoda hibernace je napsána tak, aby právě spadla, pokud sada výsledků z vyhledávání metadat tabulky vrátí více než jeden řádek. Hádám, že by měl prozkoumat dostupné řádky a zjistit, zda existuje nějaký, který se přesně shoduje se zadaným názvem tabulky.

Testoval jsem to pro Oracle i MySQL se stejným výsledkem.



  1. Křížový dotaz s dynamickými sloupci v SQL Server 2005 nahoru

  2. Proč by moje stránky asp.net-mvc používající nhibernate jednoduše přestaly provádět aktualizace a mazat?

  3. Talend etl oracle error 0 řádek vložit

  4. mysql Přístup odepřen uživateli ''@'localhost' do databáze ''