22

Hibernateは検出を続けます

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

存在していても。これが私の本社です

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

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

4

2 に答える 2

33

次のようにする必要があります。

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

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

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

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

于 2013-01-24T12:15:22.380 に答える
3

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

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

または使用してCONCAT

"from UserProfile where firstName LIKE CONCAT('%', :name ,'%')"
于 2013-01-24T12:15:16.133 に答える