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 に答える