Репозиторий JPA возвращает один элемент из БД, но в БД есть несколько элементов

#java #spring #spring-boot #spring-mvc #spring-data-jpa

Вопрос:

У меня в репозитории есть следующая функция

 Set<Felhasznalo> findAllByNevContainsIgnoreCase(String nev);
 

Когда я использую эту функцию в контроллере, я вернул одного пользователя.

Например, если у меня есть строка «Джон», и я вызываю функцию репо с этой строкой, я получил обратно «Джон Доу», но у меня также есть «Джон Доу-младший» в базе данных, и он мне тоже нужен.

Почему я получаю только одного Пользователя?

Комментарии:

1. Используйте Containing вместо Contains (AFAIK) и убедитесь, что у вас есть правильный hashCode и equals метод, поскольку вы используете Set те, которые важны.

2. Я ничего не меняю

Ответ №1:

Я вижу, вы используете а Set . Возможно, вы реализовали equals() функцию, которая проверяет имена и Set отфильтровывает повторяющиеся элементы.

Попробуйте изменить свой код на этот:

 List<Felhasznalo> findAllByNevContainsIgnoreCase(String nev);
 

Так что используйте List .

Комментарии:

1. Я изменил его на список, но у меня та же проблема

2. Что произойдет, если вы выполните запрос непосредственно в своей базе данных? Попробуйте протоколировать запросы, выполняемые Hibernate baeldung.com/sql-logging-spring-boot

Ответ №2:

Это связано с тем, что вы храните свой результат в Set файле, который не допускает дублирования значений, но здесь у вас есть повторяющиеся имена. Попробуйте перейти Set на List as:

 public List<Felhasznalo> findAllByNevContainsIgnoreCase(String nev);
 

Комментарии:

1. Я попробовал, но это не помогло

2. Попробуйте писать findAllByNev(String nev) вместо findAllByNevContainsIgnoreCase(String nev)