我有一段维护代码,应该在某些时间点向某些用户授予选择特权:
grant select on A_DB.A_TABLE to READ_ONLY_USER;
我想对所有表执行此操作。我可以select * from tab在Oracle或show tablesMySQL中使用它来获取完整列表,然后像这样继续前进。
select * from tab
show tables
但是由于我已经有了javax.persistence.EntityManager对象,所以我想知道是否还有另一种方法来获取所有映射的实体,经理知道(我正在使用Hibernate进行内部编程)。
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); }