Spring Data JPA:如何使用可选的过滤器参数?
Posted
技术标签:
【中文标题】Spring Data JPA:如何使用可选的过滤器参数?【英文标题】:Spring Data JPA: How to use optional filter parameter? 【发布时间】:2022-01-23 22:51:43 【问题描述】:我有以下调用我的存储库的服务方法:
List<EmployeeDTO> employees = employeeRepository.findByDepartmentUuid(depUuid);
在存储库中,我可以毫无问题地填充 DTO 如果depUuid
参数不为空。
@Query(value = "SELECT e.uuid as empUuid, e.name as empName FROM Employee e " +
"WHERE e.depUuid = :depUuid")
List<EmployeeDTO> findByDepartmentUuid(@Param(value = "depUuid") UUID depUuid);
但是,如果depUuid
参数为空,我想检索所有记录。那么,我该如何管理呢?
注意:我正在使用 JPQL,需要一个解决方案,而不是原生查询。
【问题讨论】:
其他人没有过滤 Spring Data JPA 的相关经验吗? 检查我的答案 【参考方案1】:以下查询将完成这项工作。
@Query(value = "SELECT e.uuid as empUuid, e.name as empName FROM Employee e " +
"WHERE (?1 is NOT NULL AND e.depUuid = ?1 ) OR ?1 is NULL )"
List<EmployeeDTO> findByDepartmentUuid(@Param(value = "depUuid") UUID depUuid);
【讨论】:
【参考方案2】:您可以将查询更改为不使用关系选择子句,因此您只需从整个表中进行选择。您的 Java 方法将没有参数,您可以调用它 findAllEmployees()。
如果您真的想使用已定义的相同方法,则测试空输入并委托给您的新 findAllEmployees() 方法。
【讨论】:
是的,我想使用您已经定义的相同方法。但是您能否针对这种情况发布一个示例?以上是关于Spring Data JPA:如何使用可选的过滤器参数?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 和 JPA:使用可选的范围条件实现搜索查询
如何使用 Spring Data JPA(Hibernate) 跨映射表过滤关联实体?
如何使用 BooleanBuilder (QueryDSL) 为可选的 OnetoOne JPA/Hibernate 关系建模谓词?