hibernate spatial实体类处理空间数据


由于涉及地图操作,框架使用的hibernate, 以前都是使用原生sql来实现增删改查,方便性很高,但是每次都要写sql,失去了hibernate的优势,最近发现hibernate有个处理空间数据的jar包—hibernate-spatial,记录一下hibernate使用空间字段的基础方法.

1.环境 数据库postgres9.5 空间扩展postgis2.1
方言,官网建议postgis1.3以上使用这个方言
database-platform: org.hibernate.spatial.dialect.postgis.PostgisDialect

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-spatial</artifactId>
        <version>5.4.0.Final</version>
    </dependency>

2.新建实体类Entity ,使用空间字段,以point为例
注意使用下边这个包,(最新jar包已经弃用com.vividsolutions.jts.geom.Point )
import org.geolatte.geom.Point;
数据库空间字段为shape,指定point类型和坐标系

@Column(columnDefinition = "geometry(Point,4326)")
private Point shape;

配置好空间字段之后,查询功能和之前一样就行.

3.新增功能

point对象需要通过fromWkt方法来获取,参数为wkt格式字符串,如果需要修改坐标系,则需要在前边拼接起来,用分号隔开.

   Entity entity = new Entity();
     String pointStr1  =  "SRID=4326;point(115 35)";
     String pointStr2  =  "point(115 35)";
     Point point = (Point) Wkt.fromWkt(pointStr);
            if (point != null) {
                entity.setShape(point);
            }

将获得的point字段赋值给entity,然后使用hibernate save方法即可.

plus : com.vividsolutions.jts.geom.已经被弃用,现在网上搜到的大多是这个类的用法,要认准org.geolatte.geom.;

转载自:https://blog.csdn.net/linzi19900517/article/details/85258517

You may also like...