Spring Data JPA:InvalidDataAccessApiUsageException:参数值 [web] 与预期类型不匹配 [java.util.Collection (n/a)];

Posted

技术标签:

【中文标题】Spring Data JPA:InvalidDataAccessApiUsageException:参数值 [web] 与预期类型不匹配 [java.util.Collection (n/a)];【英文标题】:Spring Data JPA: InvalidDataAccessApiUsageException: Parameter value [web] did not match expected type [java.util.Collection (n/a)]; 【发布时间】:2022-01-08 18:29:03 【问题描述】:

我有一个包含字符串列表的实体。我想在该列表中搜索另一个列表,例如:我想要所有具有指定标签列表的主题。所以基本上,我希望我提供的字符串列表包含在每个实体拥有的字符串列表中。看起来很简单,但我会出错。


主题实体:

public class Topic 
    // ...
    @ElementCollection
    @Column(name = "tags")
    private List<String> tags;
    // ...


存储库中的查询:

@Query("select t from Topic t where t.tags in (:tags)")
List<Topic> findAllByTags(@Param("tags") List<String> tags);

测试:

@Test
void findAllByTags() 
    List<String> tags = new ArrayList<>(Arrays.asList("web", "mobile"));

    List<Topic> 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)")
List<Topic> findAllByTags(@Param("tags") List<String> tags);

【讨论】:

嗨。谢谢回答。我对此进行了测试并且测试有效,但是当我尝试像控制器一样调用它时,它失败了。错误:java.sql.SQLException:操作数应包含 1 列。当我尝试使用超过 1 个标签时,它实际上失败了。任何想法为什么?

以上是关于Spring Data JPA:InvalidDataAccessApiUsageException:参数值 [web] 与预期类型不匹配 [java.util.Collection (n/a)];的主要内容,如果未能解决你的问题,请参考以下文章

spring-data详解之spring-data-jpa:简单三步快速上手spring-data-jpa开发

spring data jpa怎么和solr整合

spring data jpa问题

Spring Data 系列 Spring+JPA(spring-data-commons)

spring-data-jpa软删除方案

spring data jpa 详解