Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 Spring JPA@Query注释,SQL地理位置错误_Java_Sql_Jdbc_Spring Data Jpa_Mariadb - Fatal编程技术网

Java Spring JPA@Query注释,SQL地理位置错误

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% "

我正在尝试使用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% "
        + "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);