mysql 1292 jpa_让你的spring data jpa支持mysql的空间存储

背景

在做单车项目的时候,有一个功能点是展示周围的车辆。其实这个功能在之前的项目中也用到过,只不过一直都是用的mongoDB来实现的,后来在看文档的时候发现了,mysql也支持就想尝试使用下,在使用的过程中,出现了许多障碍,特此记录下。

一、 首先创建表,索引。

CREATE TABLE location(

address CHAR(80) NOT NULL,

address_loc POINT NOT NULL,

PRIMARY KEY(address)

);

ALTER TABLE address ADD SPATIAL INDEX(address_loc);

二、 使用springboot创建数据层

1. 创建entity

@Entity

@Table(name = "location")

public class LocationEntity implements java.io.Serializable {

/** */

@Column(name = "address", unique = true, nullable = false, length = 80)

private String address;

/** 此处Point(纬度,经度) */

@Column(name = "address_loc",columnDefinition = "POINT")

private Point addressLoc;

}

2. jpa

public interface LocationDao extends JpaRepository{}

三、service处理

@Override

public Result pushRedPackage(LocationEntity entity) {

//TODO 处理一些业务判断

……

WKTReader reader = new WKTReader();

Geometry geom = null;

try {

geom = reader.read("POINT(" + entity.getLat() + " " + entity.getLon() + ")");

} catch (ParseException e) {

e.printStackTrace();

}

entity.setAddress((com.vividsolutions.jts.geom.Point) geom);

redDao.save(entity);

return Result.ok();

}

关键点留在最后,这样还不足以能插入数据,会提示异常。Cannot get geometry object from data you send to the GEOMETRY field

需要在配置文件jpa加入支持。我使用的yml文件。

jpa:

show-sql: true

hibernate:

naming:

physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

properties:

hibernate.format_sql: true

hibernate.dialect: org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值