#spring #list #jpa #exception #jpql
#весна #Список #jpa #исключение #jpql
Вопрос:
У меня есть сущность, у которой есть список строк. Я хочу выполнить поиск в этом списке с помощью другого списка, например: мне нужны все темы с указанным списком тегов. Итак, в принципе, я хочу, чтобы мой список строк, которые я предоставляю, был включен в список строк, которые есть у каждой сущности. Кажется довольно простым, но я обнаружил ошибку.
Сущность темы:
public class Topic { // ... @ElementCollection @Column(name = "tags") private Listlt;Stringgt; tags; // ... }
Запрос в репозитории:
@Query("select t from Topic t where t.tags in (:tags)") Listlt;Topicgt; findAllByTags(@Param("tags") Listlt;Stringgt; tags);
Тест:
@Test void findAllByTags() { Listlt;Stringgt; tags = new ArrayListlt;gt;(Arrays.asList("web", "mobile")); Listlt;Topicgt; allByTags = topicService.findAllByTags(tags); }
Исключение:
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [web] did not match expected type [java.util.Collection (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [web] did not match expected type [java.util.Collection (n/a)]
Ответ №1:
Вы должны присоединиться к тегам:
@Query("select t from Topic t join t.tags tags where tags in (:tags)") Listlt;Topicgt; findAllByTags(@Param("tags") Listlt;Stringgt; tags);
Комментарии:
1. Привет. Спасибо, что ответили. Я протестировал это, и тесты работают, но когда я пытаюсь вызвать его как контроллер, он терпит неудачу. Ошибка: Исключение java.sql.SQLException: Операнд должен содержать 1 столбец(ы). На самом деле это не удается, когда я пытаюсь использовать более 1 тега. Есть идеи, почему?