Получение всех отображенных Объектов от EnitityManager

У меня есть часть кода обслуживания, который должен предоставить избранные полномочия определенному пользователю в определенные моменты времени:

grant select on A_DB.A_TABLE to READ_ONLY_USER;

Я хочу сделать это для всех таблиц. Я мог использовать select * from tab в Oracle или show tables в MySQL, чтобы получить полный список и затем идти дальше как этот.

Но так как я уже имею javax.persistence.EntityManager Объект под рукой, я задался вопросом, существует ли другой способ достигнуть все отображенные Объекты, менеджер знает о (я использую, в спящем режиме под капотом).

5
задан raoulsson 5 January 2010 в 15:39
поделиться

2 ответа

Есть два способа получить все отображенные сущности и соответствующие им таблицы SQL (могут быть и другие).

Самый простой способ - это если вы можете использовать объект Hibernate Configuration:

    for(Iterator it = config.getClassMappings(); it.hasNext();){
        PersistentClass pc = (PersistentClass) it.next();
        System.out.println(pc.getEntityName() + "\t" + pc.getTable().getName());
    }

Альтернативно, вы можете сделать немного больше кастинга и получить эту же информацию из SessionFactory:

    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();
        System.out.println(entityName + "\t" + tableName);
    }
9
ответ дан 18 December 2019 в 09:50
поделиться
[

] Проверьте, что есть в этой [] карте []: [

]. [
((Session) entityManager.getDelegate()).getSessionFactory().getAllClassMetadata() ;
]
0
ответ дан 18 December 2019 в 09:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: