Spring boot 构建条件JPQL语句

Spring boot 构建条件JPQL语句,spring-boot,expression,conditional-statements,jpql,Spring Boot,Expression,Conditional Statements,Jpql,下面是我目前在SpringBoot中定义存储库方法的JPQL语句 @Query("SELECT s FROM Station s WHERE s.latitude <= (:latitude + .5) AND" + "s.latitude >= (:latitude - .5) AND " + "s.longitude <= (:longitude + .5) AND " + "s.longitude >= (:longitud

下面是我目前在SpringBoot中定义存储库方法的JPQL语句

@Query("SELECT s FROM Station s WHERE s.latitude <= (:latitude + .5) AND"
       + "s.latitude >= (:latitude - .5) AND "
       + "s.longitude <= (:longitude + .5) AND "
       + "s.longitude >= (:longitude - .5)")
List<Station> findAllNear(@Param("latitude") double latitude,
                          @Param("longitude") double longitude);
JPQL语言文档说明表达式中允许使用括号,但它列出了表达式运算符之间的AND和OR。和或可以存在于括号内吗


还有,有更简单的方法吗?

是的,JPQL允许在括号内的表达式之间插入,因此

A && B && ((C && D) || (E && F) || (G && H))
这是有效的。将我的select语句更改为:

@Query("SELECT s FROM Station s WHERE (s.latitude <= (:latitude + .5) AND"
   + "s.latitude >= (:latitude - .5)) AND "
   + "(s.longitude <= (:longitude + .5) AND s.longitude >= (:longitude - .5)) OR "
   + "(s.longitude <= (:longitude + 360.5) AND s.longitude >= (:longitude +359.5)) OR "
   + "(s.longitude <= (:longitude - 359.5) AND s.longitude >= (:longitude - 360.5)))")
List<Station> findAllNear(@Param("latitude") double latitude,
                      @Param("longitude") double longitude);
@Query(“从站s中选择s,其中(s.latitude=(:latitude-.5))和”
+“(s.经度=(:经度-.5))或”
+“(s.经度=(:经度+359.5))或”
+“(经度=(:经度-360.5)))
列出findAllNear(@Param(“纬度”)双纬度,
@参数(“经度”)双经度);

完成了我的计划。

鉴于这是对我问题的部分回答,我不知道是否有更简单的方法,除非我同意这是执行此任务的最简单方法,否则我不会接受。
@Query("SELECT s FROM Station s WHERE (s.latitude <= (:latitude + .5) AND"
   + "s.latitude >= (:latitude - .5)) AND "
   + "(s.longitude <= (:longitude + .5) AND s.longitude >= (:longitude - .5)) OR "
   + "(s.longitude <= (:longitude + 360.5) AND s.longitude >= (:longitude +359.5)) OR "
   + "(s.longitude <= (:longitude - 359.5) AND s.longitude >= (:longitude - 360.5)))")
List<Station> findAllNear(@Param("latitude") double latitude,
                      @Param("longitude") double longitude);