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

IN-clause error with Spring Data JPA @Query annotation

将 IN 子句与 Spring Data @Query 一起使用时出现 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

IN 子句在使用 Spring 数据自动查询时完美运行:

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

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

你有没有这样试过:

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

您可以使用 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)