3

我正在使用 Hibernate 从数据库中读取数据我使用了以下命名查询:

<query name="getTable">
    select tbl from ? as tbl order by col
    </query>

在 DAO

public List<Object> selectTables(String className){

           Query query = session.getNamedQuery("getTable");
           query.setParameter(0, className);
           return (List<Object>)query.list();
    }

当我运行代码时,我得到以下异常

14:13:57,463 ERROR SessionFactoryImpl:405 - Error in named query: getTable
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ? near line 2, column 25 [
    select tbl from ? as tbl order by col

    ]
4

2 回答 2

3

你不能那样做。占位符 ( ?) 不仅被 Hibernate 替换为您可能传递的任何参数。HQL 查询被转换为 SQL 准备语句,占位符是该准备语句的参数。

数据库使用准备好的语句来计算查询的执行计划。因此,如果查询甚至不包含表名,就不可能计算出执行计划。您只能将作为参数传递给查询。您不能传递列名或表名。

于 2012-11-14T14:47:59.943 回答
0

尝试替换 Query for Criteria。

     public List<Object> selectTables(Class className){
           Criteria criteria = session.createCriteria(className);
           return (List<Object>)criteria.list();
     }
于 2017-06-15T11:47:32.950 回答