【问题标题】:Spring Data (Hibernate) dynamic WHERE clauseSpring Data(Hibernate)动态 WHERE 子句
【发布时间】:2020-06-19 02:41:03
【问题描述】:

我有一个这样的仓库

@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 Example API

如何使用 hibernate 和 jpa 实现这一点?

【问题讨论】:

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


    【解决方案1】:

    有两种选择:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-20
      • 2016-11-26
      • 2014-02-24
      • 1970-01-01
      • 2019-05-20
      • 2017-01-18
      • 1970-01-01
      • 2020-12-23
      相关资源
      最近更新 更多