私は永続化層にSpring Data JPAを使ってwebappを書いています。具体的には、私のDAOはJpaSpecificationExecutor
インターフェースを拡張しています。いくつかの属性(私は明確化のために注釈や他のメタデータを省略)とItem
のリストを想像:私のサービス層の上にJpaフィールドの値のサブセットを見つけるための仕様
data class Item(var tags: MutableList<String>)
、私のフィルタ方法は、次のようになります。
fun findBy(tagsToFilterBy: List<String>): List<Items> {
return dao.findAll { root, query, builder ->
builder.//??
}
}
私が欲しいもの達成するためには、tagsToFilterBy
を正確に含むItem
を取得することです。つまり、tagsToFilterBy
は、Item.tags
のサブセットにする必要があります。
私は約isMember(...)
メソッドについて知っていますが、それは呼び出し時に単一の "エンティティ"だけを受け入れるので、多くのタグではそれほど楽しいものではないと思います。私に何かアドバイスできますか?
私の他の質問は、builder.like(someExpression, inputFromUser)
と言うユーザー入力を直接使用するのが安全かどうか、あるいはbuilder.parameter(...)
に入れてからquery.setParameter(...)
に入れなければならないということです。
私は、フィルタリングする属性が増えていることを忘れていました。そのため、「仕様」を使用する必要があります –
私は問題を解決したコードを投稿しました。 –