Spring Data JPA @Query注释的IN子句错误

时间:2016-09-09 10:48:01

标签: java spring-data spring-data-jpa jpql in-clause

在使用带有Spring Data @Query的IN子句时,我收到IN OUT错误。

查询:

@Query("SELECT m FROM message m WHERE m.user = :user AND m.tags IN :tags")
List<Message> findByUserAndTags(@Param("user") User user, @Param("tags") List<Tag> tags);

错误:

Caused by: java.sql.SQLException: Missing IN or OUT parameter at index:: 2
使用Spring Data自动查询时,

IN子句完美运行:

List<Message> findByUserAndTagsIn(User user, List<Tag> tags);

使用@Query注释时我遗漏了什么?

2 个答案:

答案 0 :(得分:2)

您可以使用LEFT JOIN

解决此问题
@Query("SELECT m FROM message m LEFT JOIN m.tags t
        WHERE m.user = :user 
        AND t IN :tags")
List<Message> findByUserAndTags(@Param("user") User user, 
        @Param("tags") List<Tag> tags)

答案 1 :(得分:1)

你是否尝试过这样:

 @Query("SELECT m FROM message m WHERE m.user = ?1 AND m.tags IN ?2")
    List<Message> findByUserAndTags(User user, List<Tag> tags);