小编典典

从EnitityManager获取所有映射的实体

java

我有一段维护代码,应该在某些时间点向某些用户授予选择特权:

grant select on A_DB.A_TABLE to READ_ONLY_USER;

我想对所有表执行此操作。我可以select * from tab在Oracle或show tablesMySQL中使用它来获取完整列表,然后像这样继续前进。

但是由于我已经有了javax.persistence.EntityManager对象,所以我想知道是否还有另一种方法来获取所有映射的实体,经理知道(我正在使用Hibernate进行内部编程)。


阅读 211

收藏
2020-11-23

共1个答案

小编典典

我可以通过两种方式获取所有映射的实体及其对应的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);
    }
2020-11-23