mysql - Querydsl 和 MySQL - distancesphere 不存在
问题描述
我将 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(以及带有 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 函数。
谢谢!
解决方案
我不确定 QueryDSL 如何翻译查询。无论如何,Hibernate Spatial 当前不支持该st_distance_sphere
功能。
推荐阅读
- c# - C# 用户在列表中输入数组
- scala - Scala案例类,修改构造函数中的参数
- kubernetes - kops 在现有的 AWS vpc 和子网中创建集群
- javascript - React Native 中可能出现未处理的 Promise Rejection (id:0) 警告
- r - 删除 NA 时的 R 问题 | 未检测到 NA,无法通过 is.na 找到
- kubernetes - k8s 入口控制器中的 Traefik 前向身份验证
- javascript - 让用户在暗模式和亮模式之间进行选择(保存每个页面的设置,cookie?)
- django - Django,如何在views.py上获取模板标签渲染数据?
- server - 在加速器上找不到 - Apache Traffic Server
- c# - Winform - 双显示器 - 无边框窗口 - 仅最大化到主屏幕尺寸