Cześć,
Stworzyłem endpoint w Spring Boot do pobierania listy użytkowników. Gdy użytkownik zaczyna wpisywać dane, wartość jest przekazywana do metody:
public List<ClientEntity> getClientBySearchValue(String value) {
String firstPart = "", secondPart = "";
String trimmedInput = value.trim();
String[] parts = trimmedInput.split("\\s+");
if (parts.length >= 2) {
firstPart = parts[0];
secondPart = parts[1];
}
return clientRepository.searchClientsByValue(trimmedInput, firstPart, secondPart));
}
Następnie zapytanie jest wykonywane w bazie przy pomocy JPA:
@Query("SELECT r FROM ClientEntity r " +
"WHERE (" +
"(LOWER(r.name) LIKE LOWER(CONCAT('%', :firstPart, '%')) AND " +
"LOWER(r.surname) LIKE LOWER(CONCAT('%', :secondPart, '%'))) OR " +
"LOWER(r.name) LIKE LOWER(CONCAT('%', :value, '%')) OR " +
"LOWER(r.surname) LIKE LOWER(CONCAT('%', :value, '%')) OR " +
"r.phone LIKE CONCAT('%', :value, '%'))")
List<ClientEntity> searchClientsByValue(
String value,
String firstPart,
String secondPart
);
Zapytanie zwraca poprawną listę użytkowników, jednak chciałbym ograniczyć wynik do maksymalnie 50 rekordów. Próbowałem dodać Pageable , ale wtedy metoda działa niepoprawnie, zwracając dziwne rekordy.
Czy ktoś wie, dlaczego tak się dzieje? Może ktoś ma propozycje, jak lepiej rozwiązać ten problem?