web-dev-qa-db-ja.com

Hibernateは、名前付きパラメーターが存在する場合でもそれを見つけることができませんでした

Hibernateは検出を続けます

org.hibernate.QueryParameterException: could not locate named parameter [name]

存在していても。ここに私のHQLがあります

Query query = sess().createQuery("from UserProfile where firstName LIKE '%:name%'").setParameter("name", name);

なぜ休止状態がその例外をスローし続けるのですか?パラメータが存在していても?

19
user962206

次のようになります。

Query query = sess().createQuery("from UserProfile where firstName LIKE :name")
                    .setParameter("name", "%"+name+"%");

あなたの場合、':name'はHibernateが検索する実際の文字列です。実際の名前付きパラメーターが必要な場合は、:nameだけが必要です。

したがって、%:nameの値として渡される必要があり、Hibernateは:nameを実際の値に置き換えます。

値に%が含まれており、ワイルドカードではなく実際の文字にする場合は、エスケープする必要があることに注意してください。 here is エスケープクラスの例.

26

hqlを使用して連結してみてください

"from UserProfile where firstName LIKE '%' || :name || '%'"

またはCONCATを使用して

"from UserProfile where firstName LIKE CONCAT('%', :name ,'%')"
3
John Woo