Ответ 1
вы используете query.setParameter("searchKeyword", searchKeyword+"%");
вместо query.setParameter("searchKeyword", "%"+searchKeyword+"%");
первый возвращает строки для Narasimham
N
Na
Nar
Nara
и т.д.
В моем примере 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..
вы используете query.setParameter("searchKeyword", searchKeyword+"%");
вместо query.setParameter("searchKeyword", "%"+searchKeyword+"%");
первый возвращает строки для Narasimham
N
Na
Nar
Nara
и т.д.
Но он не работает, когда мы даем любого характера Нарасимхама, или 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.
Решите согласно вашему требованию.
Я бы добавил свой голос в @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