Fork me on GitHub

Arturo Volpe

I am a software engineer. Interested in open source, open data and devops.

Using Hibernate Spatial with Wildfly 9/10

17 Jun 2016 » hibernate

Hibernate Spatial is a project that allows hiberante (and JPA) to use Spatial facilities provided by database vendor’s (like postgis).

If we are using a database provided datasource, we need to add the necessary dependencies to the hibernate module in Wildfly.


First we need hibernate spatial and all of its dependencies, by default, it’s depends on GeoLatte and VididSolutions JTS. Also, geolatte depends on slf4j.

To add this dependencies, we need to downloads the desired jars, for this guide, I will use Hibernate Spatial 5.0.7, JTS 1.13, and Geolatte 1.0.1, as Wildfly 10.0.0.Final currently ships with Hibernate 5.0.7, and JTS 1.13 and Geolatte 1.0.1 are transitive dependencies for Hibernate Spatial 5.0.7.

You can get the jars from:

You can also download the dependencies directly through the Maven CLI:

mvn dependency:copy -Dartifact=org.hibernate:hibernate-spatial:5.0.7.Final:jar -DoutputDirectory=.
mvn dependency:copy -Dartifact=org.geolatte:geolatte-geom:1.0.1:jar -DoutputDirectory=.
mvn dependency:copy -Dartifact=com.vividsolutions:jts:1.13:jar -DoutputDirectory=.

If you are using another version of Hibernate, you need to check the Hibernate pom.xml and use the correct versions.


Download the three jars to $JBOSS_PATH/modules/system/layers/base/org/hibernate/main, and modify the file module.xml that is in the same path.

In the <resources> tag, add:

<resource-root path="hibernate-spatial-5.0.7.Final.jar"/>
<resource-root path="jts-1.13.jar"/>
<resource-root path="geolatte-geom-1.0.1.jar"/>

And in the dependencies tag, add:

<module name="org.slf4j"/>

Also if you are using postgresql, you need to add in the dependencies tag:

<module name="org.postgresql"/>

And this is all.


Add to your pom:


And create a entity like:

import javax.persistence.*;

import com.vividsolutions.jts.geom.Geometry;

public class Place extends BaseEntity {

  private Geometry location;

   // getters and setters

Now, we can create a query like:

  distance(p.location, :userLocation)
FROM Place p
  distance(p.location, :userLocation) ASC

And it will be translated to (if we are using postgresql) to:

SELECT st_distance(place0_.location, ?)
FROM place place0_
ORDER BY st_distance(place0_.location, ?)