Cześć,
Mam problem z zapytaniem do bazy w Spring Data. Mam swoją tabele place (id, name, ...) i zrobiłem formularz do wyszukiwania który wysyła treść formularza do serwera przy każdym puszczeniu klawisza (on keyup). Chciałbym aby zapytanie wyglądało tak:
select * from place where name like 'H%';
I nawet mi się to udało tylko że wydaje mi się, że Spring binduje sam znak 'H' a znak '%' traktuje jak coś innego niż pattern do porównywania.
Próbuje to zrobić takimi sposobami:
List<Place> findByNameStartingWith(String pattern);
@Query(value = "SELECT p FROM Place p WHERE p.name LIKE ?1%")
List<Place> findByPattern(String pattern);
@Query(value = "SELECT p FROM Place p WHERE p.name LIKE CONCAT(?1, '%')")
List<Place> findByPattern(String pattern);
I za kazdym razem w konsoli dostaje
2017-11-04 23:58:53.452 DEBUG 6248 --- [nio-8080-exec-5] org.hibernate.SQL : select place0_.id as id1_2_, place0_.description as descript2_2_, place0_.latitude as latitude3_2_, place0_.longitude as longitud4_2_, place0_.name as name5_2_, place0_.type_id as type_id6_2_, (SELECT coalesce(avg(o.grade), 0) FROM Opinion o WHERE o.place_id = place0_.id) as formula32_, (SELECT place_image.name FROM place_image WHERE place_image.place_id = place0_.id AND place_image.is_main_image = true) as formula33_ from place place0_ where place0_.name like ?
2017-11-04 23:58:53.455 TRACE 6248 --- [nio-8080-exec-5] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - ["H"%]
Zapytanie wychodzi dobre (przeklejone jako zapytanie do postgresa działa dobrze) ale problem jest z tym ze nie zwraca żadnych wyników. Nawet jak jako parametr do stringa doklejam z tyłu znak '%' to i tak binduje się on po właściwym tekście i nic nie wnosi.
Stąd moje pytanie czy wiecie jak to rozwiązać?
Próbowałem jeszcze nativeQuery ale niestety wyrzucało nulla.
Inne zapytania Spring Data działają prawidłowo.