F1V3.0-图形-使用hibernate spatial 5对空间几何字段的映射


由于F13.0使用Hibernate 5所以对应的Hibernate Spatial也要升级到5.x版本,在官网发现5.x版本已经被嵌入到Hibernate框架中,不在由Hibernate Spatial官方维护了。

一 简介

  • Hibernate Spatial是Hibernate处理地理数据的通用扩展。 Hibernate Spatial是根据LGPL许可证开源和许可的,如Hibernate。

  • Hibernate Spatial允许您以标准化方式处理地理数据。 它从数据库支持地理数据的具体方式抽象出来,并为地理数据存储和查询功能提供了一个标准化的跨数据库接口。

  • Hibernate Spatial支持OGC简单功能规范的大部分功能。 支持的数据库有:Oracle 10g / 11g,Postgresql / Postgis,MySQL,Microsoft SQL Server和H2 / GeoDB。

  • Hibernate Spatial官方网站包含旧版本(1.x和4.x)的文档及下载包。 5.x及更高版本的文档将很快在Hibernate ORM官方网站上提供,从5.x开始已经被嵌入到hibernate框架中使用,成为其中一个模块。

二 引入依赖

将如下代码添加到pom.xml文件,添加到依赖(dependencys)节点内

    <!-- hibernate spatial 5 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-spatial</artifactId>
        <version>5.0.8.Final</version>
    </dependency>

目前只能从中央仓库下载到5.0.8.Final版本,其它版本没找到,下载会失败。

三 修改数据库方言

数据库默认方言是不支持spatial的,需要修改成spatial扩展的方言才能使用。
打开application.properties配置文件,这里以mysql作为列子,添加如下配置:

#使用spatial/GIS方言
spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQLSpatialDialect
  • 附:方言列表
数据库类型 方言
Postgis org.hibernate.spatial.dialect.postgis.PostgisDialect
H2 org.hibernate.dialect.H2Dialect
GeoDb (H2 spatial extension) org.hibernate.spatial.dialect.h2geodb.GeoDBDialect
Oracle 11g org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect
MS SQL Server dialect org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect
MySQL 5 dialects org.hibernate.spatial.dialect.mysql.MySQLSpatialDialect
MySQL 5 InnoDDB dialect org.hibernate.spatial.dialect.mysql.MySQLSpatial5InnoDBDialect
MySQL 5.6.1 dialect org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect

四 模型注释

对数据库中对应的地理几何字段添加注释,注意spatial没有使用二级缓存,所以不能添加@Cache二级缓存注释,否侧微服务启动时会报错,代码如下:

@Column(name = "GRAPHGEOMETRY", nullable = false)
private Geometry graphGeometry;

再贴上一个完整的模型代码:

/**
 * @Package: com.jb.gis.model<br>
 * @ClassName: TbGraph<br>
 * @Description: TGraph 图形实体对象<br>
 */
@Entity
@Table(name = "tb_gis_graph", catalog = "us_gis")
public class TbGraph extends PersistClass implements java.io.Serializable {

private static final long serialVersionUID = 7123148713399645659L;

    /** 主键标示 */
    @GenericGenerator(name = "generator", strategy = "assigned")
    @Id
    @GeneratedValue(generator = "generator")
    @Column(name = "ID", unique = true, nullable = false, length = 48)
    private String Id;

    /** 图形id */
    @Column(name = "GraphID", unique = true, nullable = false, length = 48)
    private String graphId;

    /** 图形名称 */
    @Column(name = "GRAPHNAME", length = 150, nullable = true)
    private String graphName;

    /** 图形对应的图元符号id */
    @Column(name = "GRAPHTYPE", length = 50, nullable = true)
    private String graphType;

    /** 图形所属图层id */
    @Column(name = "LayerID", length = 100, nullable = false)
    private String layerId;

    /** 图形渲染样式 */
    @Column(name = "Style", length = 500, nullable = true)
    private String style;

    /** 额外字段,现主要存储连接关系 */
    @Column(name = "Extra", length = 300, nullable = true)
    private String extra;

    @Column(name = "APPLICABLEFIELD", length = 500, nullable = true)
    private String applicableField;

    /** 几何图形 */
    //@Type(type="org.hibernate.spatial.JTSGeometryType")
    @Column(name = "GRAPHGEOMETRY", nullable = false)
    private Geometry graphGeometry;

    /** 规划状态 */
    @Column(name = "PLANNINGSTATE", length = 500, nullable = true)
    private String planningState;

    /** 关联图层id */
    @Column(name = "RELATEDLAYERID", length = 500, nullable = true)
    private String relatedLayerId;

    /** 关联图形字段 */
    @Column(name = "RELATEDGRAPHID", length = 500, nullable = true)
    private String relatedGraphId;

    /** 关联站内图图层id */
    @Column(name = "STATIONLAYERID", length = 500, nullable = true)
    private String stationLayerID;

    public String getId() {
        return Id;
    }

    public void setId(String Id) {
        this.Id = Id;
    }

    public String getGraphId() {
        return graphId;
    }

    public void setGraphId(String graphId) {
        this.graphId = graphId;
    }

    public String getGraphName() {
        return graphName;
    }

    public void setGraphName(String graphName) {
        this.graphName = graphName;
    }

    public String getGraphType() {
        return graphType;
    }

    public void setGraphType(String graphType) {
        this.graphType = graphType;
    }

    public String getLayerId() {
        return layerId;
    }

    public void setLayerId(String layerId) {
        this.layerId = layerId;
    }

    public String getStyle() {
        return style;
    }

    public void setStyle(String style) {
        this.style = style;
    }

    public String getExtra() {
        return extra;
    }

    public void setExtra(String extra) {
        this.extra = extra;
    }

    public String getApplicableField() {
        return applicableField;
    }

    public void setApplicableField(String applicableField) {
        this.applicableField = applicableField;
    }

    public Geometry getGraphGeometry() {
        return graphGeometry;
    }

    public void setGraphGeometry(Geometry graphGeometry) {
        this.graphGeometry = graphGeometry;
    }

    public String getPlanningState() {
        return planningState;
    }

    public void setPlanningState(String planningState) {
        this.planningState = planningState;
    }

    public String getRelatedLayerId() {
        return relatedLayerId;
    }

    public void setRelatedLayerId(String relatedLayerId) {
        this.relatedLayerId = relatedLayerId;
    }

    public String getRelatedGraphId() {
        return relatedGraphId;
    }

    public void setRelatedGraphId(String relatedGraphId) {
        this.relatedGraphId = relatedGraphId;
    }

    public String getStationLayerID() {
        return stationLayerID;
    }

    public void setStationLayerID(String stationLayerID) {
        this.stationLayerID = stationLayerID;
    }
}

至此hibernate spatial 5配置完成,还是比较简单的,但是如果在f13.0中使用hibernate spatial 1.x就比较麻烦,后面文章会介绍1.x版本的配置。

转载自:https://blog.csdn.net/ZHBR_F1/article/details/74240875

You may also like...