Spring boot 构建条件JPQL语句
下面是我目前在SpringBoot中定义存储库方法的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
@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);