1.空间数据:如果做地图方面的开发,那么对空间数据肯定不会陌生,也就是地图元素即,点,线,图形,它们有x,y坐标的信息
2.MySQL对于空间数据库本身就是支持的,只是支持的不太全面,实际上专业空间数据库非postgis莫属,之所以使用Mysql是因为项目中的数据库已经使用了它,而且对于地图方面的功能并不是很高,所以才有了这样的应该场景:使用MySQL做空间数据库,对于MySQL的空间数据库的操作,参见MySQL使用手册第19章中有详细的说明使用各空间函数的使用sql语句
3.Hibernate Spatial是一个免费开源的对于hibernate支持空间数据操作的扩展框架,版本目前有1.0,1.1,1.1.1,4.0四个版,用法基本相同,
1.1支持hibernate3.5及以下,
1.1.1支持Hibernate3.6;
4.0支持hibernate4.x
对于版本的支持问题,请根据个人的版本而定,必须对应,我在使用中就是吃了版本不对应的亏,使用Hibernate Spatial4.0与hibernate3.6使用,最后报出不支持的异常
异常如下:
4.对于Hibernate Spatial以后的版本,好像以与不会独立的去发行,而是随着Hibernate5会一起存在,也就是可能会在Hibernate5中直接对空间数据的支持.
5.代码部分:(使用hibernate3.6.0+mysql5.5+hibernate spatial1.1.1)
实体类
public class TowerPoint
{
private String line_id;
private Point point;
public String getLine_id()
{
return line_id;
}
public void setLine_id(String line_id)
{
this.line_id = line_id;
}
public Point getPoint()
{
return point;
}
public void setPoint(Point point)
{
this.point = point;
}
}
对应的hbm.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Mapping file autogenerated by MyEclipse Persistence Tools -->
<hibernate-mapping>
<class name="com.tcly.test.TowerPoint" table="om_point">
<id name="line_id" type="java.lang.String">
<column name="POINT_ID" length="40" />
<generator class="assigned"></generator>
</id>
<property name="point" type="org.hibernatespatial.GeometryUserType">
<column name="POINT_SHARP"/>
</property>
</class>
</hibernate-mapping>
对应的cfg.xml文件
<!-- 支持空间数据库的MySQL方言 -->
<property name = "hibernate.dialect">org.hibernatespatial.mysql.MySQLSpatialDialect</property>
进行测试的代码: