SSH的整合参考的【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2这篇文章,写得非常细致,我参考并按照自身需求做了改动,实现通过HibernateSpatial使用postgis的ST_within(geometry A,geometry B)函数来查询polygon范围内的点。
现记录改动及自认重要之处,以备后时翻阅:
实例类里的几何类型:
@Type(type = "org.hibernate.spatial.GeometryType")
private Point point;
实例类对应的**.hbm.xml:
1.id自增
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="sequence">
<param name="sequence">maps_id_seq</param>
</generator>
</id>
2.几何字段及时间戳字段
<property name="point" type="org.hibernate.spatial.GeometryType">
<column name="point" />
</property>
<property name="time" type="java.sql.Timestamp">
<column name="time" length="29" />
</property>
查询几何范围内的点:
public List<Maps> queryByRange(Geometry geo) {
String hql = "from Maps m where within(m.point,:filter) = true";
Query query = getSession().createQuery(hql);
query.setParameter("filter", geo);
List<Maps> maps = query.list();
return maps;
}
bean.xml中连接池的配置:
<!-- 配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="org.postgresql.Driver"/>
<property name="jdbcUrl" value="jdbc:postgresql://192.168.3.211:5432/postgis"/>
<property name="user" value="postgres"/>
<property name="password" value="****"/>
</bean>
hibernate.cfg.xml中dialect的配置:
<property name="dialect">
org.hibernate.spatial.dialect.postgis.PostgisDialect
</property>
用到的jar包:
hibernate-spatial-4.3.jar 、 postgis.jar 、 postgis-jdbc-driver.jar 、postgresql-9.2-1004.jdbc4.jar 、 jts-1.11.jar
还可参考tutorial4、PostGIS整合Hibernate4.0+Spring(Maven,Kepler)