在Hibernate命名查询中,将类名作为参数传递

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

    ]
2个回答

3
您不能这样做。占位符(?)不仅仅是由Hibernate替换为您可能传递的任何参数。HQL查询被转换为SQL预处理语句,而占位符是该预处理语句的参数。
数据库使用预处理语句计算查询的执行计划。因此,如果查询甚至不包含表名,那么计算执行计划就是不可能的。您只能将作为查询的参数传递。您无法传递列名或表名。

0

尝试将查询替换为条件。

     public List<Object> selectTables(Class className){
           Criteria criteria = session.createCriteria(className);
           return (List<Object>)criteria.list();
     }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接