2011-01-27 16 views

Respuesta

12

Aquí se howto conseguir uno nombreTabla con getClassMetadata

ClassMetadata cm = sessionFactory.GetClassMetadata(className); 

AbstractEntityPersister aep = (AbstractEntityPersister) cm; 
String tableName = aep.getTableName(); 

[EDIT]: se puede encontrar toda llamando getAllClassMetadata() y encontrar todos los nombres de tabla como que

Map m = sessionFactory.GetAllClassMetadata(); 
/* iterate map*/ 
AbstractEntityPersister aep = m.get(/*key (className)*/) 
String tableName = aep.getTableName(); 
+2

+1 use el método "getAllClassMetadata" y obtendrá una matriz de getAllClassMetadata que puede repetir y recopilar todos los nombres de tabla –

+0

Solo quiero mostrar obtener uno, por supuesto, puede iterar –

+0

g también debe ser pequeño (en método getClassMetadata) –

2

Si está utilizando JPA en lugar de dependencia directa en hibernación. El siguiente código debería ayudar a obtener todos los nombres de tabla

private List<String> getAllTables() { 
    List<String> tableNames = new ArrayList<>(); 
    Session session = entityManager.unwrap(Session.class); 
    SessionFactory sessionFactory = session.getSessionFactory(); 
    Map<String, ClassMetadata> map = (Map<String, ClassMetadata>) sessionFactory.getAllClassMetadata(); 
    for(String entityName : map.keySet()){ 
     SessionFactoryImpl sfImpl = (SessionFactoryImpl) sessionFactory; 
     String tableName = ((AbstractEntityPersister)sfImpl.getEntityPersister(entityName)).getTableName(); 
     tableNames.add(tableName); 
    } 
    return tableNames; 
} 
1

Puede probar el uso de consultas sql nativas.

session.createSQLQuery("SELECT * FROM user_tables").list(); 

que da lista de tablas propiedad de loggedin de usuario o de lo contrario se puede utilizar 'all_tables' o '' dba_tables para todas las tablas de base de datos.Si db Oracle MySQL se utiliza entonces reemplazar la consulta con "VER LAS TABLAS"

Cuestiones relacionadas