有没有更简单的方法使用BETWEEN进行JPQL查询以在属性中包含NULL值

Prz*_*awP 1 java jpa jpql

我有一个JPQL查询

    @Query("SELECT e FROM Entry e WHERE :chosenDate BETWEEN e.periodFrom AND e.periodTo")
    List<Entry> findByChosenDate(LocalDate chosenDate);
Run Code Online (Sandbox Code Playgroud)

有一个问题,当未设置属性“ periodFrom”或“ periodTo”之一时,将不会选择该条目。我希望查询还包括带有一个或两个NULL值的整数。

我希望查询在其他三种情况下选择条目:

  1. 当“ periodFrom”为空而“ periodTo”为空时,应找到该条目。

  2. 当“ periodFrom”为空并且“ periodTo”> =:chosenDate时,应找到该条目。

  3. 当“ periodFrom” <=:chosenDate和“ periodTo”为空时,应找到该条目。

有没有比这样的查询更简单的方法:

    @Query("SELECT e FROM Entry e WHERE (:chosenDate BETWEEN e.periodFrom AND e.periodTo) 
        OR (e.periodFrom IS NULL AND e.periodTo IS NULL )
        OR ( e.periodFrom <= :chosenDate AND e.periodTo IS NULL)
        OR (e.periodFrom IS NULL AND e.periodTo >= :chosenDate)") 
    List<Entry> findByChosenDate(LocalDate chosenDate);
Run Code Online (Sandbox Code Playgroud)

Tom*_*ekK 8

I don't know if you find it better, but something like this would be shorter:

SELECT e FROM Entry e WHERE (:chosenDate BETWEEN COALESCE(e.periodFrom, 0000-01-01) AND COALESCE(e.periodTo, 9999-12-31) 
Run Code Online (Sandbox Code Playgroud)