【发布时间】:2019-08-23 13:41:57
【问题描述】:
我有一个 JPQL 查询
@Query("SELECT e FROM Entry e WHERE :chosenDate BETWEEN e.periodFrom AND e.periodTo")
List<Entry> findByChosenDate(LocalDate chosenDate);
存在一个问题,即当“periodFrom”或“periodTo”属性之一未设置时,条目将不会被选中。我希望查询还包括具有一两个 NULL 值的整体。
我希望查询在另外三种情况下选择条目:
当“periodFrom”为空且“periodTo”为空时,应找到该条目。
当“periodFrom”为空且“periodTo”>=:chosenDate 时,应找到该条目。
当 "periodFrom"
有没有比这样的查询更简单的方法:
@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);
【问题讨论】:
-
您是否考虑过为查询提供一些默认值,以便它永远不会直接处理 NULL 值?
COALESCE将日期设置为合理的默认值,以便它们仍然满足您的标准 -
我没有考虑过提供默认值,但我会考虑的。是的,使用 COALESCE 可以缩短查询时间。