valor una traer tabla seleccionar seleccionada permite obtener modelo leer fila específico elementos datos dato como columna java database oracle hibernate exception-handling

java - traer - Se encontró más de una tabla en el espacio de nombres(,)-SchemaExtractionException



permite leer un dato específico del modelo de datos de un jtable en java (5)

Me he enfrentado a esta extraña excepción al intentar persistir algunos valores en una tabla usando Hibernate en una aplicación Java. Sin embargo, esta excepción se produce solo para una tabla / entidad particular para el resto de las tablas, puedo realizar operaciones crud a través de Hibernate.

A continuación, encontrará Stacktrace y avíseme si esto está relacionado con el código Java o si es un error de diseño de la base de datos.

2016-04-28 11:52:34 ERROR XXXXXDao:44 - Failed to create sessionFactory object.org.hibernate.tool.schema.extract.spi.SchemaExtractionException: More than one table found in namespace (, ) : YYYYYYY Exception in thread "main" java.lang.ExceptionInInitializerError at com.XX.dao.XXXXXXXDao.main(XXXXXXXXDao.java:45) Caused by: org.hibernate.tool.schema.extract.spi.SchemaExtractionException: More than one table found in namespace (, ) : YYYYYYY at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.processGetTableResults(InformationExtractorJdbcDatabaseMetaDataImpl.java:381) at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.getTable(InformationExtractorJdbcDatabaseMetaDataImpl.java:279) at org.hibernate.tool.schema.internal.exec.ImprovedDatabaseInformationImpl.getTableInformation(ImprovedDatabaseInformationImpl.java:109) at org.hibernate.tool.schema.internal.SchemaMigratorImpl.performMigration(SchemaMigratorImpl.java:252) at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:137) at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:110) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:176) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:64) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:458) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) at com.xx.dao.zzzzzzzzzzzzDAOFactory.configureSessionFactory(zzzzzzzDAOFactory.java:43) at com.xx.dao.zzzzzzzzzzzzDAOFactory.buildSessionFactory(zzzzzzzzzDAOFactory.java:27) at com.xx.dao.XXXXXXXXDao.main(XXXXXXXXDao.java:41)

Gracias de antemano por tu ayuda


He tenido el mismo problema y pude profundizar en el código para descubrir la causa, al menos en mi caso. No sé si será el mismo problema para usted, pero esto puede ser útil.

Desde su rastro de pila puedo ver que tiene el hibernate.hbm2ddl.auto configurado para actualizar el esquema. Como parte de esto, intenta buscar los metadatos para todas las tablas que hibernate conoce y para uno de ellos obtener una respuesta ambigua porque la consulta de metadatos está devolviendo más de una sola fila de tabla o metadatos de vista.

En mi caso, esto fue causado por nuestra convención de nombres para tablas. Tuvimos una tabla llamada (decir) "AAA_BBB" para la cual esto estaba yendo mal. Ahora, el uso de un guión bajo en el nombre de la tabla es perfectamente aceptable por lo que yo sé y es una práctica bastante común. Sin embargo, el guión bajo también es el comodín de SQL para un solo carácter; Al mirar el código para los metadatos de la base de datos, puedo ver que está haciendo un "WHERE table_name LIKE ..." en el método DatabaseMetaData.getTables (...), que es lo que hibernate está usando aquí.

Ahora, en mi esquema, también tenía una segunda tabla llamada "AAA1BBB" y, por lo tanto, ambas coincidían con la búsqueda de metadatos, por lo que devolvía una fila de metadatos para cada una de estas tablas. El método de hibernación se escribe para que se caiga si el conjunto de resultados de la búsqueda de metadatos de la tabla devuelve más de una fila. Supongo que debería examinar las filas disponibles y encontrar si hay una que coincida exactamente con el nombre de la tabla especificada.

Probé esto para Oracle y MySQL con el mismo resultado.


Parece que la propiedad hibernate.hbm2ddl.auto establecer para actualizar está causando el problema aquí. Intente eliminarlo de su hibernate config xml.


Use el valor de catálogo con @Table , es decir:

@Entity @Table(**catalog = "MY_DB_USER"**, name = "LOOKUP") public class Lookup implements Serializable { }

No tengo este error ahora. Espero este trabajo.


Esto funcionará:

Verifique los esquemas de su base de datos y los privilegios de usuario de su base de datos;

El mecanismo de actualización de Hibernate puede fallar con esta excepción si hay otro esquema de base de datos / usuario con el mismo nombre de tabla, y el usuario de db tiene suficientes privilegios para ver esta tabla.

Entonces, en su caso, la tabla ''YYYYYYY'' puede encontrarse en más de un usuario / esquema de base de datos, y su usuario db tiene privilegios ''DBA''.

Para resolver esto, puede buscar y eliminar la tabla ambigua o eliminar los privilegios redundantes del usuario.


Puede ocurrir otra situación, excepto lo que sea que se haya dicho el querido RichB. en ORACLE cada usuario tiene un esquema separado, por lo tanto, probablemente haya tablas de remolque con el mismo nombre en dos esquemas diferentes, entonces debe especificar su esquema predeterminado en persistence.xml con la propiedad a continuación

<property name="hibernate.default_schema" value="username"/>