2011-01-27 7 views

ответ

12

Здесь HOWTO получает один TABLENAME с getClassMetadata

ClassMetadata cm = sessionFactory.GetClassMetadata(className); 

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

[EDIT]: вы можете найти все по телефону getAllClassMetadata() и найти все имена таблиц, как этот

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

+1 используйте метод getAllClassMetadata, и вы получите массив getAllClassMetadata, который вы можете перебирать и собирать все имена таблиц. –

+0

. Я просто хочу показать, что вы, конечно, можете итерации –

+0

g также должны быть небольшими (в getClassMetadata) –

2

Если вы используете JPA вместо прямой зависимости от спящего режима., Следующий код должен помочь в получении всех имен таблиц.

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

Вы можете попробовать использовать собственные SQL-запросы.

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

, который дает список таблиц, принадлежащих LoggedIn пользователя или же вы можете использовать «ALL_TABLES» или «dba_tables» для всех таблиц для оракул database.If БД MySQL используется замените запрос с «SHOW TABLES»

Смежные вопросы