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

来源:互联网 发布:centos 英伟达 编辑:程序博客网 时间:2024/06/07 20:28

由于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版本的配置。

阅读全文
0 0