【问题标题】:Hibernate - Get all table names in a DatabaseHibernate - 获取数据库中的所有表名
【发布时间】:2016-05-13 19:14:44
【问题描述】:

我正在尝试获取数据库(Oracle 11g)中的所有表名,以便为 UI 中的每个表动态生成复选框。我没有在 .cfg.xml 文件中映射任何这些表。

我使用了以下代码:

List<Object> list = sessionProd.createQuery("select table_name from user_tables").list();                               

for(Object l : list){
    System.out.println("L : " +l.toString());
}

但它错误如下: org.hibernate.hql.internal.ast.QuerySyntaxException: user_tables is not mapped [select table_name from user_tables]

如果有任何方法可以获取 Hibernate 4 中的所有表名,请告诉我

【问题讨论】:

  • 试试 List,for(String s: list ) 应该可以帮到你。

标签: java oracle hibernate rcp


【解决方案1】:

你需要使用 SQL 查询,而不是 HQL 查询

sessionProd.createSQLQuery("select table_name from user_tables").list();

【讨论】:

    【解决方案2】:

    使用本机 SQL 查询方法解决了该问题。感谢您的建议。

    以下代码对我有用:

    List<Object> list = sessionProd.createSQLQuery("select table_name from user_tables").list();     
    

    【讨论】:

      【解决方案3】:

      我认为查询不正确。试试下面的 sn-p

      List<Object> list = sessionProd.createQuery("show tables from Database_name").list();                               
      

      【讨论】:

      • createQuery() 仅用于 HQL 查询
      【解决方案4】:

      使用 select table_name from all_tables 更改查询字符串

      List<Object> list = sessionProd.createQuery("select table_name from all_tables").list();                               
      
      for(Object l : list){
           System.out.println("L : " +l.toString());
      }
      

      【讨论】:

      • 它显示了数据库中的所有表(不仅仅是我映射的架构中的表)。该方法也应该是 createSQLQuery
      【解决方案5】:

      在这种情况下,Hibernate 会向您返回异常,因为您没有映射 user_tables。如果你想获得所有你应该创建 SQLQuery 的表名,那会返回给你你需要的。您只能将 HQL (createQuery) 用于映射表

      【讨论】:

        猜你喜欢
        • 2021-10-17
        • 2011-02-16
        • 1970-01-01
        • 2011-09-07
        • 2011-11-17
        • 1970-01-01
        • 2013-03-01
        • 2011-04-30
        • 2011-02-17
        相关资源
        最近更新 更多