获取在SessionFactory中设置的所有表名

有没有办法检索由SessionFactory管理的所有表的名称? 例如,通过AnnotationConfiguration.addAnnotatedClass(...))添加的所有表格?

以下是如何使用getClassMetadata获取一个tableName

 ClassMetadata cm = sessionFactory.GetClassMetadata(className); AbstractEntityPersister aep = (AbstractEntityPersister) cm; String tableName = aep.getTableName(); 

[编辑] :您可以通过调用getAllClassMetadata()找到所有这些,并查找所有类似的表名

 Map m = sessionFactory.GetAllClassMetadata(); /* iterate map*/ AbstractEntityPersister aep = m.get(/*key (className)*/) String tableName = aep.getTableName(); 

如果您使用JPA而不是直接依赖于hibernate。下面的代码应该有助于获取所有表名

 private List getAllTables() { List tableNames = new ArrayList<>(); Session session = entityManager.unwrap(Session.class); SessionFactory sessionFactory = session.getSessionFactory(); Map map = (Map) sessionFactory.getAllClassMetadata(); for(String entityName : map.keySet()){ SessionFactoryImpl sfImpl = (SessionFactoryImpl) sessionFactory; String tableName = ((AbstractEntityPersister)sfImpl.getEntityPersister(entityName)).getTableName(); tableNames.add(tableName); } return tableNames; } 

您可以尝试使用本机SQL查询。

 session.createSQLQuery("SELECT * FROM user_tables").list(); 

给出了登录用户拥有的表的列表,否则你可以对oracle database的所有表使用’all_tables’或’dba_tables’。如果使用mysql db,则用“SHOW TABLES”替换查询