【发布时间】:2019-05-12 02:11:00
【问题描述】:
我在尝试将条目插入到包含地理位置数据的表中时遇到了问题。实际上,该表仅包含一个地理位置列,即 Point 数据类型。我正在使用 Java JPA 和 MariaDB。最奇怪的部分是代码过去可以工作,但应用程序正在开发中,现在,在git merge 之后,它不再工作了,即使与此地理定位实体相关的代码都没有被合并代码修改,所以我不知道为什么它不再起作用了。
我得到的错误是:
2018-12-11 03:15:21.008 WARN 16710 --- [nio-8080-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper:SQL 错误:1416,SQLState:22003
2018-12-11 03:15:21.008 错误 16710 --- [nio-8080-exec-5] ohengine.jdbc.spi.SqlExceptionHelper : (conn:1569) 无法从您发送到的数据中获取几何对象GEOMETRY 字段
查询是:插入本地化(关联用户 ID、城市、补语、坐标 x、坐标、社区、数字、点、公共场所、公共场所类型、州、邮政编码、ID)值(?、?、?、?、?、?, ?, ?, ?, ?, ?, ?, ?), 参数 [,'Fortaleza','',-3.7605171,-38.57384639999998,'Jóquei Clube','2307',
这个 我正在使用以下方法保存数据: 下面是我的application.yml,配置和代码停止工作前一样。 现在,我找到了使用 感谢您的帮助, 谢谢, 更新: 深入挖掘,我发现所有表都是为 MyISAM 创建的,而不是为 InnoDB 创建的,而且显然 hibernate 没有检测 application.yml 中的配置。春季日志说: 找不到hibernate.properties 使用方言:org.hibernate.dialect.MySQL5Dialect 顺便说一句,我可以直接在 mysql 控制台中使用以下命令插入: 但在尝试使用 Java 中的该查询时,使用本机查询仍然没有游戏。插入现在正在工作,但函数 更新 2:我能够按照此处的提示强制使用方言 MySQL5InnoDBDialect:https://stackoverflow.com/a/44472411/3435735。 但这并没有改变任何东西,我仍然从函数 最终更新:我能够解决这个问题,虽然我不知道具体是怎么做的,而且我更不知道它为什么会工作然后停止。但是我所做的只是让代码保持问题出现之前的样子,不使用本机查询,确保我已经在 pom.xml 中加载了 lib hibernate-spatial,并在 application.yml 中设置了配置public Location addLocation(Location location){
location.setPoint(new Point(location.getCoordX(),location.getCoordY()));
return locationRepository.saveAndFlush(location);
}
server.port: 8080
server.context-path: /api
spring:
datasource:
url: jdbc:mariadb://localhost:3306/api
driverClassName: org.mariadb.jdbc.Driver
username: root
password: root
jpa:
hibernate:
ddl-auto: create
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
hbm2ddl.auto: update
show_sql: true
logging:
level:
org.springframework: ERROR
dialect 配置和值 org.hibernate.spatial.dialect.mysql.MySQL5InnoDBSpatialDialect 的答案,但不幸的是,这对我没有帮助。现在我没有想法了。我不认为问题出在 application.yml 配置中,因为以前使用相同的配置。
INSERT INTO location (zip_code,state,city,number,neighbourhood,public_place_type,public_place,coordx,coordy,point)
VALUES ('60510430','ce','fortaleza','2307','jóquei','avenida','carneiro de mendonca',55.2918681,-20.9388982,ST_GeomFromText('POINT(55.2918681 -20.9388982)'));
ST_PointFromText('POINT (?1 ?2)') 总是将列值设置为空,如果我将点列设置为非空,插入会给出“列'点'不能为空”。 ST_PointFromWKB(?1,?2) 也一样,这到底是怎么回事?ST_PointFromText('POINT (?1 ?2)') 和 ST_PointFromWKB(?1,?2) 得到 null。而且我肯定会通过这些论点。
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect,因为spring.jpa.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect 显然是不正确的。
【问题讨论】:
标签: mysql jdbc geolocation spring-data-jpa mariadb