获取在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”替换查询
- 没有persistence.xml的JPA
- 我可以在Discriminated Entity Hierarchy的子类上使用CompositeId吗?
- 如何为这个SQL查询编写Hibernate Criteria?
- 无论如何,我都无法在Hibernate中批量处理MySQL INSERT语句
- 使用hibernate和gilead for gwt添加到实体类中保存的列表时的LazyInitializationException
- 是否可以在Hibernate中的同一项目中同时使用注释和hbm.xml文件?
- Java Date Hibernate切断时间
- 带有@Transactional注释的Spring OpenSessionInViewFilter
- 使用Set面向循环依赖时的Java序列化错误