Получить все имена таблиц, настроенные в SessionFactory - PullRequest
6 голосов
/ 27 января 2011

Есть ли способ получить имя всех таблиц, которыми управляет SessionFactory?Например, все таблицы, которые были добавлены через AnnotationConfiguration.addAnnotatedClass(...))?

Ответы [ 3 ]

12 голосов
/ 27 января 2011

Вот как получить одно имя таблицы с помощью 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 голосов
/ 14 ноября 2014

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

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 голос
/ 04 августа 2016

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

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

, который дает список таблиц, принадлежащих зарегистрированному пользователю, или же вы можете использовать 'all_tables' или 'dba_tables' для всех таблиц базы данных Oraclemysql db используется, затем замените запрос на «SHOW TABLES»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...