Hibernate Spatial 4およびPostGIS 2.0


10

これらのテクノロジーを統合する際にいくつか問題があります。

  • Hibernate Spatial 4.0-M1
  • 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を介してアプリケーションにデータソースを公開したところです。

これが私にとってうまくいったことです:

  • hibernate-spatialのmaven依存関係を含めた場合、hibernate自体、postgresqlのjdbc、postgisの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です。readmeを読んでください。
  • 次に、最新のpostgresql-jdbcと最近コンパイルされたpostgis jdbcをtomcatのlibディレクトリに配置しました
  • Tomcatのサーバー構成で、データベースのURLをに変更しましたjdbc:postgresql_postGIS://localhost:5432/mydatabasepostgresql_postGISパーツに注目してください。また、ドライバクラスをに変更しましたorg.postgis.DriverWrapper。これは、postgisタイプをネイティブの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"/>

この手順は一般に、postgis jdbcのREADMEに記載されています。必ずお読みください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.