0

ご覧のとおり、2 つの名前付きパラメーターがあります。1 つは setParameterList() によって設定され、もう 1 つは setParmeter() によって設定されます。問題は、リストが順序付けられていないことです。注文フィールドを明示的に設定すると正常に動作しますが、同じ文字列がメソッドに渡されているため、動作しません。setParameter と setParameterList を連鎖できないということですか?どちらもクエリを返しますが、理由がわかりません。私は何が欠けていますか?

public List<Subject> getSubjectsByMedium(String orda, Medium... medium) {
    List<Subject> subjects = currentSession().createQuery("from Subject where medium in(:medium) order by :orda").setParameterList("medium", medium).setParameter("orda", orda).list();
    return Subjects;
}
4

1 に答える 1

3

いいえ、メソッドチェーンの問題ではありません。ORDER問題は、名前付きパラメーターを使用して HQL (または SQL) クエリを設定できないことです。

クエリ文字列を個別に作成してから、作成したオブジェクト:mediumに名前付きパラメーターを設定する必要があります。Query

String query = "from Subject where medium in(:medium) order by " + orda;

これにより、SQL インジェクションに対して脆弱になる可能性があります。

于 2013-09-19T15:07:25.530 に答える