Querydsl и MySQL - расстояния не существует

0

Я использую QueryDSL v4.1.4 с Spring Boot и Hibernate 5.

Моя цель - выполнить запрос, основанный на функции 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 (а также H2 с orbisgis):

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

Ps. Используя запрос, созданный EntityManager, используя st_distance_sphere, запрос выполняется нормально, указывая, что MySQL правильно настроен для обработки функций Geo.

Спасибо!

Теги:
querydsl
hibernate-spatial

1 ответ

1
Лучший ответ

Я не уверен, как QueryDSL переводит запрос. В любом случае Hibernate Spatial в настоящее время не поддерживает функцию st_distance_sphere.

  • 0
    Спасибо! Теперь я нашел другой вопрос, который указывает на вашу открытую проблему в спящем режиме. stackoverflow.com/questions/48343371/...
  • 0
    Я решаю, используя within

Ещё вопросы

Сообщество Overcoder
Наверх
Меню