Подтвердить что ты не робот

Hibernate Named Query Использование операторов Like и%%?

В моем примере Hibernate JPA.

public List<AttendeesVO> addAttendees(String searchKeyword) {
    TypedQuery<AttendeesVO> query = entityManager.createQuery(" select at from AttendeesVO at where at.user.firstName LIKE :searchKeyword",AttendeesVO.class);
    query.setParameter("searchKeyword", searchKeyword+"%");
    return query.getResultList();
}

он отлично работает при передаче целых строк firstName=Narasimham

Но он не работает, когда мы приводим символ Narasimham i.e a или n

На самом деле, я думаю, что я даю оператор Like с % %, чтобы он работал с любым символом данной String..

4b9b3361

Ответ 1

вы используете query.setParameter("searchKeyword", searchKeyword+"%");

вместо query.setParameter("searchKeyword", "%"+searchKeyword+"%");

первый возвращает строки для Narasimham N Na Nar Nara и т.д.

Ответ 2

Но он не работает, когда мы даем любого характера Нарасимхама, или n

Потому что вы делаете регистр, чувствительный к регистру. Попробуйте N, Na, Nar. Если вы хотите выполнить поиск без учета регистра, попробуйте использовать upper или lower. как

entityManager.createQuery("select at from AttendeesVO at where lower(at.user.firstName) LIKE lower(:searchKeyword)",AttendeesVO.class);  

На самом деле, я думаю, что я даю как оператор с%%

searchKeyword+"%" означает возвращаемые значения, начинающиеся с searchKeyword.
"%"+searchKeyword+"%" означает возвращаемые значения, содержащие searchKeyword.
Решите согласно вашему требованию.

Ответ 3

Я бы добавил свой голос в @ssk, чтобы использовать два% до и после ключевого слова. Или я думаю, что это более профессиональное решение, если вы настроили его в самом запросе так:

public List<AttendeesVO> addAttendees(String searchKeyword) {
    TypedQuery<AttendeesVO> query = entityManager.createQuery(" select at from AttendeesVO 
    at where at.user.firstName LIKE CONCAT('%',:searchKeyword,'%')",AttendeesVO.class);
    query.setParameter("searchKeyword", searchKeyword);
    return query.getResultList();
}

потому что "%" его часть запроса, а не параметра, что вы можете заполнить его позже

Функция CONCAT() добавляет два или более выражения вместе. https://www.w3schools.com/sql/func_mysql_concat.asp