我在一些Spring Boot
应用程序中使用Spring Data JPA Specifications
动态过滤实体,现在尝试将相同的逻辑应用于DTO
而不是entity
类。
然而,据我在some threads上看到的,它似乎不支持:
我们目前不支持DTO投影,因为我们不区分要选择的内容,我们只选择实体根
那么,什么是正确的方法来动态过滤和排序DTO
对象列表?我试图创建一个自定义过滤方法,如下所示,但不确定是否有更好的方法用于此目的。那么,如何使用Kotlin
在Spring Boot
中动态过滤DTO
结果列表?
class AccountDtoFilter(private val filterDTO: AccountFilterDTO) : Specification<AccountDTO> {
companion object {
fun createPredicate(filterDTO: AccountFilterDTO): Predicate? {
val predicates = mutableListOf<Predicate>()
if (filterDTO.name != null) {
val namePredicate = criteriaBuilder.like(root.get<String>("name"), "%${filterDTO.name}%")
predicates.add(namePredicate)
}
if (filterDTO.email != null) {
val emailPredicate = criteriaBuilder.like(root.get<String>("email"), "%${filterDTO.email}%")
predicates.add(emailPredicate)
}
// other filtering fields
return if (predicates.isEmpty()) null else criteriaBuilder.and(*predicates.toTypedArray())
}
}
}
字符串
1条答案
按热度按时间t5fffqht1#
你确定用自己的代码在内存中模拟数据库行为(用规则过滤多个对象)是个好主意吗?
在我看来,你似乎要在这里建立一个内存数据库,这是你的意图吗?那么你也可以使用一个已经建立的数据库,把你的DTO放在那里,然后查询它来过滤。
或者使用放置DTO的任何集合的
filter
方法。也许你必须从以数据库为中心的DTO视图中退一步,回到一个更与对象相关的视图中。