2016-07-03 13 views
0

私の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

答えて

1

エラーメッセージで説明しています。クエリにはLongが必要ですが、Integerを渡しています。署名を

に変更する
findByTags(Collection<String> tags, long count); 
+0

こんにちは、あなたは正しいです。これも同様に考えられます。カウントがLong型の理由を知っていますか? – dasnervtdoch

+1

データベースにはデータのshitloadが含まれている可能性がありますので、2^31以上の行はintの制限になります:-) –

関連する問題