【问题标题】:How to ignore SQL Query part of WHERE conditionally in JPA Query如何在 JPA 查询中有条件地忽略 WHERE 的 SQL 查询部分
【发布时间】:2019-07-20 01:14:22
【问题描述】:

我想知道是否可以有条件地忽略部分查询(不是整个 where 部分)。我在 JPA 中有查询

    @Query("SELECT DISTINCT new it.akademija.wizards.models.document.DocumentGetReviewCommand(" +
        "d.author.firstname, d.author.lastname, d.id, d.title, d.description, d.documentType.title, d.submissionDate)" +
        " FROM Document d" +
        " JOIN d.documentType dt" +
        " JOIN dt.reviewUserGroups rug" +
        " JOIN rug.users u WHERE u.username = :username" +
        " AND d.documentState = it.akademija.wizards.enums.DocumentState.SUBMITTED" +
        " AND u <> d.author" +
        " **AND (lower(CONCAT(d.author.firstname, ' ', d.author.lastname)) like %:searchFor% " +
        " OR lower(d.title) like %:searchFor%" +
        " OR lower(d.description) like %:searchFor%" +
        " OR lower(d.id) like %:searchFor%" +
        " OR lower(dt.title) like %:searchFor%)")
   Page<DocumentGetReviewCommand> getDocumentsForReview(@Param(value = "username") String username,
                                                     @Param(value = "searchFor") String searchFor,
                                                     Pageable pageable);

如果 searchFor 参数为空或空白 (""),我如何忽略以下部分

AND (lower(CONCAT(d.author.firstname, ' ', d.author.lastname)) like %:searchFor% " +
        " OR lower(d.title) like %:searchFor%" +
        " OR lower(d.description) like %:searchFor%" +
        " OR lower(d.id) like %:searchFor%" +
        " OR lower(dt.title) like %:searchFor%)

【问题讨论】:

  • 仅供参考,这是 JPQL,不是 SQL,这是 Spring Data JPA 而不是 JPA API

标签: spring spring-data-jpa jpql


【解决方案1】:

如果搜索词为空或为空,您可以尝试添加允许跳过这些条件的逻辑:

AND
    (COALESCE(:searchFor, '') = '' OR
    (LOWER(CONCAT(d.author.firstname, ' ', d.author.lastname)) LIKE %:searchFor% OR
     LOWER(d.title) LIKE %:searchFor%" OR
     LOWER(d.description) LIKE %:searchFor% OR
     LOWER(d.id) LIKE %:searchFor% OR
     LOWER(dt.title) like %:searchFor%))

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 2023-03-10
    • 2021-12-09
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 2012-05-21
    相关资源
    最近更新 更多