У меня есть часть кода обслуживания, который должен предоставить избранные полномочия определенному пользователю в определенные моменты времени:
grant select on A_DB.A_TABLE to READ_ONLY_USER;
Я хочу сделать это для всех таблиц. Я мог использовать select * from tab
в Oracle или show tables
в MySQL, чтобы получить полный список и затем идти дальше как этот.
Но так как я уже имею javax.persistence.EntityManager
Объект под рукой, я задался вопросом, существует ли другой способ достигнуть все отображенные Объекты, менеджер знает о (я использую, в спящем режиме под капотом).
Есть два способа получить все отображенные сущности и соответствующие им таблицы 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);
}
] Проверьте, что есть в этой [] карте [
]: [
((Session) entityManager.getDelegate()).getSessionFactory().getAllClassMetadata() ;
]