Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有一种更简单的方法可以使用BETWEEN进行JPQL查询,以便在属性中包含空值_Java_Jpa_Jpql - Fatal编程技术网

Java 有没有一种更简单的方法可以使用BETWEEN进行JPQL查询,以便在属性中包含空值

Java 有没有一种更简单的方法可以使用BETWEEN进行JPQL查询,以便在属性中包含空值,java,jpa,jpql,Java,Jpa,Jpql,我有一个JPQL查询 @Query("SELECT e FROM Entry e WHERE :chosenDate BETWEEN e.periodFrom AND e.periodTo") List<Entry> findByChosenDate(LocalDate chosenDate); @Query(“从条目e中选择e,其中:e.periodFrom和e.periodTo之间的chosenDate”) 列表findByChosenDate(LocalDat

我有一个JPQL查询

    @Query("SELECT e FROM Entry e WHERE :chosenDate BETWEEN e.periodFrom AND e.periodTo")
    List<Entry> findByChosenDate(LocalDate chosenDate);
@Query(“从条目e中选择e,其中:e.periodFrom和e.periodTo之间的chosenDate”)
列表findByChosenDate(LocalDate chosenDate);
存在一个问题,即当其中一个属性“periodFrom”或“periodTo”未设置时,将不会选择条目。我希望查询还包括具有一个或两个空值的entires

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

  • 当“periodFrom”为空且“periodTo”为空时,应找到条目

  • 当“periodFrom”为空且“periodTo”>=:chosenDate时,应找到条目


  • 当“periodFrom”时,我不知道您是否觉得它更好,但类似这样的内容会更短:

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

    您是否考虑过向查询提供一些默认值,以便它不会直接处理空值<代码>合并将日期合并为一些合理的默认值,以便它们仍然满足您的标准我没有考虑提供默认值,但我会考虑一下。是的,使用合并可以缩短查询。根据数据库的不同,您可能需要使用
    0001-01-01
    作为日期下限。
    SELECT e FROM Entry e WHERE (:chosenDate BETWEEN COALESCE(e.periodFrom, 0000-01-01) AND COALESCE(e.periodTo, 9999-12-31)