java - Spring Data (Hibernate) 动态 WHERE 子句

标签 java spring spring-boot spring-data-jpa spring-data

我有一个像这样的存储库

@Repository
public interface LeadRequestRepository extends PagingAndSortingRepository<LeadRequest, UUID> {

    @Query(value = "SELECT * FROM lead_request WHERE product IN :products AND current_status in :status", nativeQuery = true)
    List<LeadRequest> findLeadRequests(@Param("products") List<String> products, @Param("status") List<String> status);

}

在此查询中,状态可以为 null 或空列表。
在这种情况下,查询必须返回所有状态(NEW、APPROVED、REJECTED 等)。换句话说,查询必须变为 SELECT * FROM Lead_request WHERE Product IN :products 并且没有 status 子句。
我也很困惑,因为我使用 IN 子句,所以我无法使用 JPA 示例 API

如何使用 hibernate 和 jpa 实现此目的?

最佳答案

有两个选项:

  1. 您将有两个 JPQL/ native 查询,并根据 null 条件调用其中一个查询。
  2. 更好的选择是使用 JPA 标准查询。 Spring Data JPA 为称为 Specifications 的 JPA 标准查询提供抽象。看看Spring Data JPA docs here

关于java - Spring Data (Hibernate) 动态 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60562756/

相关文章:

java - 无法连接到 websocket 服务器(spring)

java - JPA:一个父类(super class)的不同列名称

spring - Grails 4.0.1 - MessageSource 注入(inject)和使用方法获取消息给出空指针异常错误

java - 通过java配置文件中的名称获取Bean

spring - java.util.zip.ZipException : invalid code lengths set with XSSFWorkbook

java - Spring boot 应用程序无法在 PUT API 调用中映射 List 对象

java - 使用 @SpringBootTest 进行 Spring Boot 和 Camel 测试

java - 云服务的 SecurityManager "sandbox"

java.io.FileNotFoundException : Acess Denied using jexcel

java - 在 Spring Boot 中设置自己的安全性