私のJQPLクエリに奇妙な問題があります。私はブックマークとタグを持っています。それらの2つは多対多の関係を持ち、結合テーブルを介して設定します。今、私はすべてのタグを持つすべてのブックマークを照会したいと思います。カウント(*)を持つJPQLグループ
次のように動作します。それは私がそれが戻ってくるはずです知っているブックマークを私に与える。
@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();
今、私はこれをparameteriseしようとしています。私はタグのリストと予想される数を渡したいと思います。 それは動作しません。
@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);
は、私は次の例外を取得:私はのように3つあるタグのリストのサイズを渡していますように、パラメータの値は、正しいです
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)]
静的な例。しかし、それはなぜロングを期待していますか?
誰か手掛かりがありますか?
ありがとうございます!溶液で
UPDATE: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型の理由を知っていますか? – dasnervtdoch
データベースにはデータのshitloadが含まれている可能性がありますので、2^31以上の行はintの制限になります:-) –