具有count(*)

时间:2016-07-03 14:26:35

标签: java jpa repository jpql

我的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

1 个答案:

答案 0 :(得分:1)

错误消息解释了它。查询需要Long,但是您传递的是Integer。将签名更改为

findByTags(Collection<String> tags, long count);