【问题标题】:Querydsl and MySQL - distancesphere does not existQuerydsl 和 MySQL - distancesphere 不存在
【发布时间】:2018-09-13 18:02:14
【问题描述】:

我在 Spring Boot 和 Hibernate 5 中使用 QueryDSL v4.1.4。

我的目标是执行一个基于ST_DISTANCE_SPHERE函数的查询,根据到起点的距离来查询结果。

我有以下疑问:

where
     .and(
         QAddress.address.geoPoint.point.distanceSphere(
               ExpressionUtils.toExpression(GeocoderUtils.geometryFactory.createPoint(new Coordinate(longitude, latitude)))
         ).loe(distance)
     );

QAddress.address.geoPoint.point 是 JTS 点,geometryFactory 的 SRID = 4326 和 PrecisionModel.maximumPreciseValue

在 MySQL(以及带有 orbisgis 的 H2)中产生的异常是:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION schemaname.distancesphere does not exist
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

额外:

    application.yml: 
    database-platform: org.hibernate.spatial.dialect.mysql.MySQL5InnoDBSpatialDialect

    build.gradle
    compile group: 'com.querydsl', name: 'querydsl-jpa', version: '4.1.4'
    compile group: 'com.querydsl', name: 'querydsl-sql', version: '4.1.4'
    compile group: 'com.querydsl', name: 'querydsl-sql-spatial', version: '4.1.4'
    compile group: 'com.querydsl', name: 'querydsl-sql-spring', version: '4.1.4'
    compile("com.vividsolutions:jts:1.13")
    compile "org.hibernate:hibernate-spatial:${hibernate_version}"
    compile 'com.bedatadriven:jackson-datatype-jts:2.4'
    testCompile group: 'org.orbisgis', name: 'h2gis', version: '1.4.0'
    testCompile('com.h2database:h2:1.4.196')
    testCompile group: 'org.opengeo', name: 'geodb', version: '0.8'
    ... and so on

附言。使用EntityManager创建的查询,使用st_distance_sphere,查询正常执行,说明MySQL已正确配置处理Geo函数。

谢谢!

【问题讨论】:

    标签: mysql querydsl hibernate-spatial


    【解决方案1】:

    我不确定 QueryDSL 如何翻译查询。在任何情况下,Hibernate Spatial 当前不支持st_distance_sphere 函数。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2018-09-17
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多