Spring Data JPA @query标记未使用Postgres DB验证空值

时间:2018-04-10 08:11:14

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

@Query("from PrsBookingProcess pbp where (:bookingOwnerCode='' OR pbp.bookingOwnerCode = :bookingOwnerCode)"
        + "and (pbp.crtDttime BETWEEN :fromDate AND :toDate)"
        + "and (:bookingProcStatus is null OR pbp.bookingProcStatus = :bookingProcStatus)"
List<PrsBookingProcess> findByPnrbydateRangeandOperator(
        @Param("bookingOwnerCode") String bookingOwnerCode, 
        @Param("fromDate") Calendar fromDate,
        @Param("toDate") Calendar toDate, 
        @Param("bookingProcStatus") String bookingProcStatus);

这是我的JPA查询命中Postgres DB。我的bookingOwnerCode值仅在我使用空引号(&#39;&#39;)检查该值时才为空。如果我通过制作它们来检查:BookingOwnerCode为null并且从UI中将它们设为null它将不会获取我的记录。

与bookingProcStatus一样。如果我没有在UI中给出任何值并运行上面的查询,它将不会获取任何东西,除非我给它一些值。

我正在使用PGAdmin3进行postgrep和JPA进行查询。

1 个答案:

答案 0 :(得分:0)

您可以使用:bookingOwnerCode is null OR :bookingOwnerCode = ''而不只是:bookingOwnerCode = ''

或者您可以编写一个单元/集成测试来验证预期的行为。