美文网首页
让你的spring data jpa支持mysql的空间存储

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

作者: 灿烂的黑土 | 来源:发表于2019-01-04 16:41 被阅读0次

背景

在做单车项目的时候,有一个功能点是展示周围的车辆。其实这个功能在之前的项目中也用到过,只不过一直都是用的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<LocationEntity , Integer>{}

三、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

相关文章

网友评论

      本文标题:让你的spring data jpa支持mysql的空间存储

      本文链接:https://www.haomeiwen.com/subject/sekkrqtx.html