我试图获取数据库(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未映射[select table_name from user_tables]
如果有办法在Hibernate 4中获取所有表名,请告诉我
答案 0 :(得分:2)
您需要使用SQL查询而不是HQL查询
sessionProd.createSQLQuery("select table_name from user_tables").list();
答案 1 :(得分:2)
使用本机SQL查询方法解决了该问题。谢谢你的建议。
以下代码对我有用:
List<Object> list = sessionProd.createSQLQuery("select table_name from user_tables").list();
答案 2 :(得分:0)
我认为查询不合适。尝试使用以下代码段
List<Object> list = sessionProd.createQuery("show tables from Database_name").list();
答案 3 :(得分:0)
使用all_tables中的select table_name更改查询字符串
List<Object> list = sessionProd.createQuery("select table_name from all_tables").list();
for(Object l : list){
System.out.println("L : " +l.toString());
}
答案 4 :(得分:0)
在这种情况下,Hibernate会向您返回Exception,因为您没有映射user_tables。如果你想获得所有的表名,你应该创建SQLQuery,这将返回给你所需要的。您只能对映射表使用HQL(createQuery)