java 如何在Sping Boot 中动态过滤DTO结果?

xcitsw88  于 10个月前  发布在  Java
关注(0)|答案(1)|浏览(105)

我在一些Spring Boot应用程序中使用Spring Data JPA Specifications动态过滤实体,现在尝试将相同的逻辑应用于DTO而不是entity类。
然而,据我在some threads上看到的,它似乎不支持:
我们目前不支持DTO投影,因为我们不区分要选择的内容,我们只选择实体根
那么,什么是正确的方法来动态过滤和排序DTO对象列表?我试图创建一个自定义过滤方法,如下所示,但不确定是否有更好的方法用于此目的。那么,如何使用KotlinSpring 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())
        }
    }
}

字符串

t5fffqht

t5fffqht1#

你确定用自己的代码在内存中模拟数据库行为(用规则过滤多个对象)是个好主意吗?
在我看来,你似乎要在这里建立一个内存数据库,这是你的意图吗?那么你也可以使用一个已经建立的数据库,把你的DTO放在那里,然后查询它来过滤。
或者使用放置DTO的任何集合的filter方法。
也许你必须从以数据库为中心的DTO视图中退一步,回到一个更与对象相关的视图中。

相关问题