条件不为空的SQL请求

时间:2018-10-04 15:26:05

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

我正在尝试编写一个根据几个条件执行搜索的查询。

我当前的JPA请求:

@Query("SELECT c FROM Client c " +
    "INNER JOIN c.entite e " +
    "WHERE e.numeroLicence in (:numerosLicence) " +
    "AND (UPPER(c.nom) LIKE CONCAT('%',UPPER(:nom),'%') " +
    "AND (c.prenom IS NOT NULL AND UPPER(c.prenom) LIKE CONCAT('%',UPPER(:prenom),'%')) " +
    "AND (c.dateCreation IS NOT NULL AND c.dateCreation > :dateCreation) " +
    "AND (c.dateCreation IS NOT NULL AND c.dateModification > :dateModification) " +
    "AND (c.dateCreation IS NOT NULL AND c.dateSuppression > :dateSuppression)) ")
Page<Client> recherche(@Param("numerosLicence") ArrayList numerosLicence,
                       @Param("nom") String nom,
                       @Param("prenom") String prenom,
                       @Param("dateCreation") ZonedDateTime dateCreation,
                       @Param("dateModification") ZonedDateTime dateModification,
                       @Param("dateSuppression") ZonedDateTime dateSuppression,
                       Pageable pageable);

问题是它会自动排除列包含NULL的行。

我只需要对具有数据的列进行选择,如果字段值为NULL,它将不会尝试执行子句

例如,如果我有一个firstname列为NULL的行,那么该行会自动从结果中排除,而我希望它不测试此列是否为NULL

您有个主意吗? 我正在寻找一种避免创建尽可能多的查询组合的解决方案

1 个答案:

答案 0 :(得分:0)

听起来像您应该使用OR而不是AND

c.dateCreation IS NULL
   OR c.dateCreation > :dateCreation