0

複数の where パラメータを使用して HQL クエリを作成しようとしています

result = sessionFactory.getCurrentSession().createQuery("from County where " + [0].property + "=?"+","+ c[1].property + "=?")

.setParameter(0, c[0].value)
.setParameter(1, c[1].value).list();

これを行う代わりに、次のような任意の数のパラメーターを処理できるクエリを作成しようとしています

for(Params c:parms){`enter code here`
    queryString+= c.property +" = "+c.value+",";
    }
result = (State) sessionFactory.getCurrentSession()
                .createQuery("from County where " +queryString)
                .list().get(0);

クエリは正しいように見えますが、「クエリを実行できません」と表示されます

4

1 に答える 1

1

a) 固定サイズのパラメーターを使用していたように、準備済みステートメントの使用をあきらめたのはなぜですか?

b) なぜc.property +" = "+c.value+",";クエリ文字列ではなく「結果」に帰するのですか?

c) そのコンマは、前述の属性で何をしているのですか? 「と」か「か」じゃないの?

回答への再コメント

「a) 固定サイズの代わりに複数の pams を使用する」

String whereClause = new String();
for (Params p : params) {
    if (whereClause.isEmpty())
        whereClause = " where ";
    else
        whereClause += " and ";
    whereClause += p.property + " = ? ";
}
Query query = sessionFactory.getCurrentSession().createQuery("from County " + whereClause);
for (int i = 0; i<params.size(); i++) {
    query.setParameter(i, params[i].value);
}
result = (State) query.list().get(0);

"c) 上記のコードの使用が失敗する場所のパラメーターが 1 つしかない場合でも! – "

そうです、パラメーターが 1 つある場合でも、クエリの最後にコンマを追加しています。これは有効な形式ではありません

于 2013-01-08T17:48:13.643 に答える