Hibernate Spatial 4 та PostGIS 2.0


10

У мене є проблеми інтеграції цих технологій:

  • Зимовий простір 4,0-М1
  • PostGIS 2.0.2 (зі скомпільованим JDBC 2.0.2)
  • Зимова сплячка 4.1.1

Конкретна помилка:

Caused by: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgis.PGgeometry. Use setObject() with an explicit Types value to specify the type to use.

Анотація суб'єкта господарювання:

@NotNull
@Column(columnDefinition="Geometry")
@Type(type="org.hibernate.spatial.GeometryType")
private Point geom;

Приклад створення точки:

Location location = new Location();
WKTReader fromText = new WKTReader();
Point geom = null;
try {
    geom = (Point) fromText.read("POINT(-56.2564083434446 -34.8982159791812)");
} catch (ParseException e) {
    throw new RuntimeException("Not a WKT string:" + "SRID=4326;POINT(-56.2564083434446 -34.8982159791812)");
}
if (!geom.getGeometryType().equals("Point")) {
    throw new RuntimeException("Geometry must be a point. Got a " + geom.getGeometryType());
}
location.setGeom(geom);
locationDAO.insert(location);

Відповіді:


5

Я використовував Tomcat, і це об'єднання об'єднань. Я просто викрив джерело даних для своєї програми через JNDI .

Ось що для мене спрацювало:

  • Коли я включив мавенську залежність до сплячого-просторового режиму, він має перехідну залежність від самої сплячки, jdbc postgresql і jdbc постгіса. Тож, що я зробив, було усунути ці залежності (застарілі). Мій пом виглядає так:
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-spatial</artifactId>
    <version>4.0</version>
    <exclusions>
        <exclusion>
            <artifactId>hibernate-core</artifactId>
            <groupId>org.hibernate</groupId>
        </exclusion>
        <exclusion>
            <artifactId>postgis-jdbc</artifactId>
            <groupId>org.postgis</groupId>
        </exclusion>
        <exclusion>
            <artifactId>postgresql</artifactId>
            <groupId>postgresql</groupId>
        </exclusion>
    </exclusions>
</dependency>

Postgis jdbc - це розширення до postgresql jdbc, яке вам потрібно.

  • Потім я клонував сховище postgis і склав їх розширення jdbc. Просто запустіть mvn packageу java/jdbcкаталозі. Прочитайте його зміст.
  • Тоді я помістив останній postgresql-jdbc та нещодавно складений postgis jdbc у libдовідник tomcat
  • У налаштуваннях сервера tomcat я змінив URL-адресу бази даних на jdbc:postgresql_postGIS://localhost:5432/mydatabase. Зауважте postgresql_postGISдеталь. Я також змінив клас водія на org.postgis.DriverWrapper. Це обгортка, яка реєструє типи постгіс з рідним jdbc.

Ось моя остаточна конфігурація ресурсу в tomcat:

<Resource auth="Container"
          maxActive="120" maxIdle="10" name="jdbc/myapp"
          username="myuser" password="mypassword"
          poolPreparedStatements="true" type="javax.sql.DataSource" 
          driverClassName="org.postgis.DriverWrapper"
          validatingQuery="select 1"
          url="jdbc:postgresql_postGIS://localhost:5432/myapp"/>

Ця процедура, як правило, описана в README postgis jdbc. Тому обов'язково прочитайте .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.