簡體   English   中英

JPQL組通過計數(*)

[英]JPQL group by having count(*)

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

所以參數值是正確的,因為我要傳遞的標簽列表的大小是3,如靜態示例中那樣。 但是為什么會期待龍呢?

有人知道嗎?

謝謝!

解決方案更新:

正如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

錯誤消息對此進行了解釋。 查詢期望Long,但是您要傳遞Integer。 將簽名更改為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM