我的JQPL查询有一个奇怪的问题。我有书签和标签,这两个有很多关系,通过连接表设置。现在我想查询所有包含所有标签的书签。
以下作品。它给了我一个我知道它应该返回的书签。
@Query("select b from Bookmark b left join b.tags t where t.id in ('mtb', 'video', 'news') group by b.id having count(*) = 3")
Collection<Bookmark> findByTagsStatic();
现在我正在尝试对此进行参数化。我想传递标签列表和预期计数。 它不起作用。
@Query("select b from Bookmark b left join b.tags t where t.id in ?1 group by b.id having count(*) = ?2")
Collection<Bookmark> findByTags(Collection<String> tags, int count);
我得到以下异常:
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [3] did not match expected type [java.lang.Long (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [3] did not match expected type [java.lang.Long (n/a)]
所以参数值是正确的,因为我传递的标签列表的大小是静态示例中的三个。但是为什么期待Long?
有人有线索吗?
谢谢!
更新解决方案:
正如JB正确评论,现在可以使用以下内容:
@Query("select b from Bookmark b left join b.tags t where t.id in ?1 group by b.id having count(*) = ?2")
Collection<Bookmark> findByTags(Collection<String> tags, Long count);
使用java.lang.Long
代替int
。
答案 0 :(得分:1)
错误消息解释了它。查询需要Long,但是您传递的是Integer。将签名更改为
findByTags(Collection<String> tags, long count);