Java Spring JPA@Query注释,SQL地理位置错误
我正在尝试使用MariaDB 10.0.36(使用innodb引擎)和Spring数据,通过基于地理位置的本机查询获取表项 这是我的方法签名:Java Spring JPA@Query注释,SQL地理位置错误,java,sql,jdbc,spring-data-jpa,mariadb,Java,Sql,Jdbc,Spring Data Jpa,Mariadb,我正在尝试使用MariaDB 10.0.36(使用innodb引擎)和Spring数据,通过基于地理位置的本机查询获取表项 这是我的方法签名: @Query(value = "SELECT j " + "FROM Car j " + "WHERE distance(j.localization.point, POINT((?2), (?3))) AS sdistance < 10 " + "AND (j.name LIKE %?1% "
@Query(value = "SELECT j "
+ "FROM Car j "
+ "WHERE distance(j.localization.point, POINT((?2), (?3))) AS sdistance < 10 "
+ "AND (j.name LIKE %?1% "
+ "OR j.carCategory.name LIKE %?1% "
+ "OR j.description LIKE %?1%) "
+ "ORDER BY sdistance "
+ "LIMIT 25", nativeQuery = true)
List<Car> getNearestCars(String text, double lat, double lon);
我使用以下命令创建函数距离(位于):
这是应用程序。yml:
server.port: 8080
server.context-path: /api
enter code here
spring:
datasource:
url: jdbc:mariadb://localhost:3306/databasename
driverClassName: org.mariadb.jdbc.Driver
username: root
password: root
jpa:
hibernate:
ddl-auto: create
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
hbm2ddl.auto: update
show_sql: false
logging:
level:
org.springframework: ERROR
当我访问getNearestJobs方法时,我得到以下错误:
org.mariadb.jdbc.internal.util.dao.QueryException:您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解使用near'AS sdistance<10和(第1行的j.name如“%eteste10%”或j.jobCategory.name如“%ete”)的正确语法
查询是:从作业j中选择j,其中距离(j.localization.point,point((?),(?))作为sdistance<10和(j.name LIKE?或j.jobCategory.name LIKE?或j.description LIKE?)按sdistance LIMIT排序,参数[-5.1797161,-40.6646966,'%ETest10%,'%ETest10%,'%ETest10%']
我做错了什么?我明白了。sql查询有两个问题:第一,如果使用本机查询,显然不能使用面向对象的抽象;第二,sdistance应该在SELECT子句中声明,而不是在WHERE/HAVING子句中声明
@Query(value = "SELECT *, distance(l.point, POINT((?2), (?3))) AS jdistance "
+ "FROM cars j, car_categories c, localizations l "
+ "WHERE (j.name LIKE %?1% "
+ "OR j.description LIKE %?1% "
+ "OR (j.car_category_id = c.id AND c.name LIKE %?1%)) "
+ "AND l.id = j.localization_id "
+ "HAVING jdistance < 10 "
+ "ORDER BY jdistance"
, nativeQuery = true)
List<Car> getNearestCars(String text, double lat, double lon);
@Query(value=“SELECT*,距离(l.点,点((?2),(?3))作为jdistance”
+“来自汽车j,汽车U类别c,本地化l”
+“其中(j.名称,如%?1%”
+“或j.描述,如%?1%。”
+“或(j.car\u category\u id=c.id和c.name,如%?1%)”
+“和l.id=j.id”
+“距离小于10”
+“按距离订购”
,nativeQuery=true)
列出getNearestCars(字符串文本、双lat、双lon);
我将根据您的错误消息重新标记,以帮助将此信息传达给正确的受众。
server.port: 8080
server.context-path: /api
enter code here
spring:
datasource:
url: jdbc:mariadb://localhost:3306/databasename
driverClassName: org.mariadb.jdbc.Driver
username: root
password: root
jpa:
hibernate:
ddl-auto: create
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
hbm2ddl.auto: update
show_sql: false
logging:
level:
org.springframework: ERROR
@Query(value = "SELECT *, distance(l.point, POINT((?2), (?3))) AS jdistance "
+ "FROM cars j, car_categories c, localizations l "
+ "WHERE (j.name LIKE %?1% "
+ "OR j.description LIKE %?1% "
+ "OR (j.car_category_id = c.id AND c.name LIKE %?1%)) "
+ "AND l.id = j.localization_id "
+ "HAVING jdistance < 10 "
+ "ORDER BY jdistance"
, nativeQuery = true)
List<Car> getNearestCars(String text, double lat, double lon);