[英]JPA JPQL: SELECT NEW with COUNT, GROUP BY and ORDER BY
[英]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.