我写持久层上使用Spring数据JPA web应用程序,更具体地说,我的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.//??
}
}
我想要什么实现的是只检索Item
包含正是tagsToFilterBy
S,换句话说,tagsToFilterBy
应该是Item.tags
一个子集。
我知道isMember(...)
方法,但我认为它的用法只接受单一的“实体”在呼叫不会很宜人,许多标签。你能帮我一些建议吗?
我的另一个问题是,直接使用用户输入是否安全,比如builder.like(someExpression, inputFromUser)
或者我必须把它放在builder.parameter(...)
然后query.setParameter(...)
。
谢谢你的任何想法
我忘记提到的问题,我可能有更多的属性来过滤,这就是为什么我需要使用'规格' –
我发布了代码,解决了我的问题,随时看看。 –