web-dev-qa-db-fra.com

Hibernate n'a pas pu localiser le paramètre nommé même s'il existe

Hibernate continue de détecter

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

même si elle existe. voici mon hql

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

Pourquoi hibernate continue de lever cette exception? même si le paramètre existe?

19
user962206

Devrait être comme ça:

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

Dans ton cas ':name' est la chaîne réelle qu'Hibernate recherchera. Si vous devez avoir un vrai paramètre nommé, vous devez simplement avoir :name.

Donc % doit être transmis comme une valeur de :name et Hibernate remplacera :name avec valeur réelle.

Notez que si votre valeur contient % et vous voulez que ce soit une lettre réelle au lieu d'un caractère générique, vous devrez y échapper, voici un exemple de classe escaper.

26

essayez de le concaténer en utilisant hql

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

ou en utilisant CONCAT

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