¿Cómo puedo replicar “MOSTRAR TABLAS” en Hibernate?

Estoy tratando de recorrer todas mis tablas para poder truncar cada una (al comienzo de cada una de mis pruebas de JBehave).

Pensé que sería capaz de:

List allTables = session.createSQLQuery("SHOW TABLES").list(); 

Pero hibernate lanza una excepción SQLGrammarException, quejándose de que “la columna ‘TABLE_NAME’ no se encuentra”.

Supongo que esto se debe a que la consulta “mostrar tablas” en realidad no devuelve una lista de cadenas. ¿Hay otra forma de obtener una lista de todas mis tablas utilizando Hibernate?

Intenta algo como esto:

 SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE(); 

Para las columnas (la misma situación con Hibernate) intente:

 SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=YOUR_TABLE_NAME 

Si desea truncar toda la tabla, puede establecer hibernate.hbm2ddl.auto en hibernate.cfg.xml por el valor Crear.

 create 

pero si solo desea obtener el nombre de todas las tablas y truncar algunos de ellos, este método no funcionará.

Si aún tiene acceso al objeto de Configuración de Hibernación, puede hacer esto:

 for (Iterator iter=configuration.getClassMappings(); iter.hasNext();) { PersistentClass persistentClass = (PersistentClass)iter.next(); String table = persistentClass.getTable().getName(); // Code to truncate table (or just use a query with session.executeUpdate) } 

Eso supone que tiene una tabla por entidad y solo le importan las tablas que están asignadas. De lo contrario, probablemente deba hacer algo con la conexión subyacente y el DatabaseMetaData, por ejemplo:

 session.connection().getMetaData().getTables(catalog, schemaPattern, tableNamePattern, types)