2013-07-07 9 views
5

HQL文で名前付きパラメータをバインドしていますが、入力されません。Hibernateカラム名パラメータバインディング

//colname = "AdminsInfo.name"; assume it is from method's input 
//colval = input.getName().toString(); // assume it is from method's input 

String query = "from AdminsInfo where :coln = :colv"; 
Query q = session.createQuery(query); 
q.setParameter("coln",colname); 
q.setParameter("colv",colval); 

System.out.println(q.toString());   

これは、パラメータ(coln、colv)が設定されていないことを意味し、0レコードを返します。

QueryImpl(from AdminsInfo where :coln = :colv) 
Hibernate: select adminsinfo0_.Row as Row1_0_, adminsinfo0_.ID as ID2_0_,adminsinfo0_.Name as Name3_0_, ... where ?=? 

HQLステートメントで列名をバインドする方法についてのご意見をお待ちしております。ありがとう。マッディ

答えて

6

パラメータとして列名をバインドすることはできません。列値のみ。実行計画が計算されるとき、パラメータ値をバインドしてクエリを実行する前に、この名前を知っておく必要があります。このような動的クエリを実際に作成したい場合は、Criteria APIを使用するか、クエリを動的に作成する他の方法を使用します。

1

クライテリアのクエリを置き換えてみます。

Criteria c = session.createCriteria(AdminsInfo.class); 
c.add(Restrictions.eq(colname,colval)); 
c.list(); 
関連する問題