在尝试向包含地理位置数据的表中插入条目时遇到问题。实际上,该表只包含一个地理位置列,即点数据类型。我正在使用javajpa和mariadb。最奇怪的是,代码以前是可以工作的,但应用程序正在开发中,现在,在 git merge
,它不再工作了,即使与这个地理位置实体相关的代码都没有被合并的代码修改过,所以我不知道为什么它不再工作了。
我得到的错误是:
2018-12-11 03:15:21.008警告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]o.h.engine.jdbc.spi.sqlexceptionhelper:(conn:1569)无法从发送到“几何体”字段的数据中获取几何体对象
查询是:插入本地化(关联的用户id、城市、补码、坐标X、坐标Y、邻里、号码、点、公共场所、公共场所类型、州、邮政编码、id)值(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?),参数[,'fortaleza',''',-3.7605171,-38.5738463999998,'jó奎克吕贝 ','2307',<bytearray:��
这个<bytearray:�� 应为点字段的值。
我使用以下方法保存数据:
public Location addLocation(Location location){
location.setPoint(new Point(location.getCoordX(),location.getCoordY()));
return locationRepository.saveAndFlush(location);
}
下面是my application.yml,配置与代码停止工作前相同。
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配置上,因为以前使用相同的配置。
感谢您的帮助,
谢谢,
更新:进一步挖掘,我发现所有的表都是为myisam而不是innodb创建的,显然hibernate没有检测application.yml中的配置。spring log说:
找不到hibernate.properties
使用方言:org.hibernate.dialect.mysql5dialect
顺便说一句,我可以直接在mysql控制台中插入以下命令:
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)'));
但在尝试使用来自java的查询时,仍然没有游戏,使用原生查询。插入功能正在运行,但是 ST_PointFromText('POINT (?1 ?2)')
总是将列值设置为null,如果我将point列设置为not null,则插入会给出“column'point'cannot be null”。同样的情况也发生在 ST_PointFromWKB(?1,?2)
我勒个去?
更新2:我可以按照下面的提示强制使用方言mysql5innodbdialect:https://stackoverflow.com/a/44472411/3435735.
但这并没有改变什么,我仍然从函数中得到null ST_PointFromText('POINT (?1 ?2)')
以及 ST_PointFromWKB(?1,?2)
. 我肯定会通过辩论。
最后更新:我能够解决这个问题,虽然我不知道具体是如何解决的,我甚至不知道为什么它工作,然后停止。但我所做的只是让代码保持问题出现之前的状态,而不使用本机查询,确保已在pom.xml中加载lib hibernate spatial,并设置配置 spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect
在application.yml中,自 spring.jpa.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect
显然是不正确的。
1条答案
按热度按时间vm0i2vca1#