Search code examples
javadatabasehibernatedata-bindingpersistence

Getting all mapped Entities from EntityManager


I have a piece of maintenance code that should grant select privileges to a certain user at certain points of time:

grant select on A_DB.A_TABLE to READ_ONLY_USER;

I want to do this for all tables. I could use select * from tab in Oracle or show tables in MySQL to get the complete list and then move on like that.

But since I already have the javax.persistence.EntityManager Object at hand, I wondered if there is another way to get at all the mapped Entities, the Manager knows about (I am using Hibernate under the hood).


Solution

  • There are two ways that I can see getting all of the mapped entities and their corresponding SQL tables (there may be others).

    The most straightfoward is if you can use your Hibernate Configuration object:

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

    Alternatively, you can do a little more casting and get this same information out of the SessionFactory too:

        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);
        }