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
- 附:方言列表
四 模型注释
对数据库中对应的地理几何字段添加注释,注意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版本的配置。
- F1V3.0-图形-使用hibernate spatial 5对空间几何字段的映射
- Hibernate Spatial处理多对多关系空间映射
- hibernate spatial - 保存oracle具有空间字段的表
- Mysql对空间数据库的支持及使用Hibernate Spatial对空间数据的持久化操作
- F1V3.0-图形-如何下载及使用离线的瓦片地图
- Spring+SpringMVC+hibernate spatial+oracle spatial 映射存储Geomety空间数据过程记录
- F1V3.0-图形-GIS基础知识
- oracle spatial - 空间字段初探
- 空间数据库Spatial Tools的使用
- Oracle spatial创建空间数据的字段详解
- Hibernate Spatial处理空间数据
- Hibernate Spatial处理空间数据
- F1V3.0-图形-OpenLayers2体系分析
- F1V3.0-图形-绘图快捷操作帮助
- F1V3.0-图形-绘图框架主要功能简介
- F1V3.0-图形-前端绘图库简介
- 空间映射网络--Spatial Transformer Networks
- 空间映射网络--Spatial Transformer Networks
- Exception in thread "main" java.lang.NoClassDefFoundError解决
- 电工实验室基础生存技能第一季第二集
- 巧用这五招提升Discuz!论坛运行速度
- 20170703
- 多线程基础 、 TCP通信
- F1V3.0-图形-使用hibernate spatial 5对空间几何字段的映射
- 为什么要使用多线程?多线程的优点和缺点是什么?
- Gulp前端自动化工具
- ubuntu+win7双系统引导找不到的问题
- JDK怎么安装与配置环境变量
- Javac -cp 和 Java -cp 命令解释
- PT100温控设计
- MapReduce的shuffle过程图解
- 【POJ2151】Check the difficulty of problems(概率DP)