JPA весенних данных: Исключение InvalidDataAccessApiUsageException: Значение параметра [web] не соответствует ожидаемому типу [java.util.Коллекция (n/a)];

#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 тега. Есть идеи, почему?