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);

Почему hibernate продолжает бросать это исключение? хотя параметр существует?

2 ответа

Должно быть так:

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

В вашем случае ':name' - фактическая строка, которую будет искать Hibernate. Если вам нужен настоящий именованный параметр, вам нужно просто :name.

Таким образом, % следует передать как значение :name, а Hibernate заменит :name на фактическое значение.

Обратите внимание, что если ваше значение содержит %, и вы хотите, чтобы оно было фактическим письмом вместо подстановочного знака, вам нужно будет его избежать, здесь является примером класса escaper.


попробуйте объединить его с помощью hql

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

или используя CONCAT

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

licensed under cc by-sa 3.0 with attribution.