3

Hibernate Spatial チュートリアルに従って、Hibernate を介して Spring Roo を PostGIS 対応の PostgreSQL データベースと統合しようとしています。GIS 以外のものはすべて正常に動作しており、PostGIS テンプレートから DB を作成しました。

問題は、Geometry プロパティをエンティティの 1 つに追加するとすぐに次のようになることです。

@Type(type="org.hibernate.spatial.GeometryType")
private Point centerPoint;

...ビルドは問題ありませんが、サーバー上で実行しようとすると (そして実際に DB と対話しようとすると)、以下のエラーが発生します。

Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 3000
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:77)
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:100)
    at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:298)
    at org.hibernate.mapping.Column.getSqlType(Column.java:208)
    at org.hibernate.mapping.Table.sqlCreateString(Table.java:418)
    at org.hibernate.cfg.Configuration.generateSchemaCreationScript(Configuration.java:1099)
    at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:106)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:372)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
    ... 41 more

Hibernate Spatial の依存関係は、postgis-jdbc 1.5.3 が必要であることを示唆しているようですが、1.5.3 はどの Maven リポジトリにも存在せず、ソースからコンパイルできません。1.5.2 と 1.3.3 を試しましたが、どちらも同じ 3000 エラーになります。HS は 1.5.3 を「提供」する必要があると言っていますが、依存関係を 1.5.3 に設定し<scope>provided</scope>ても役に立ちません。

これは単に JDBC の正確なバージョンが必要な場合ですか、それとも何か問題がありますか?

私のPOMの関連する抜粋は次のとおりです。

        <dependency>
            <groupId>com.vividsolutions</groupId>
            <artifactId>jts</artifactId>
            <version>1.12</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-spatial</artifactId>
            <version>4.0-M1</version>
        </dependency>
        <dependency>
            <groupId>org.postgis</groupId>
            <artifactId>postgis-jdbc</artifactId>
            <version>1.5.2</version>
        </dependency>

そしてからpersistence.xml

<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisDialect"/>
4

2 に答える 2

5

あなたの例外は、注釈によって提供されたデータ型を Postgresql の方言がサポートできないことを意味します。カスタム クラスで拡張してサポートを追加すると、問題を解決できる可能性があります。

私はGISプロジェクトを見てきましたが、javassistの依存関係もコンパイルスコープで提供していますか?

次の注釈を使用してデータ型を参照しようとしましたか? https://stackoverflow.com/a/3047190/390462を参照してください。

@Column(name = "geometry", columnDefinition="Geometry", nullable = true) 
private Geometry geometry;

私が理解している限りcolumnDefinition、フィールドに a を指定する必要があります。そうしないと、フィールドを適切な db 列にマップできません。

于 2012-08-28T09:29:46.340 に答える
0

解決策を見つけました!

(Grails、Hibernate Spatial 4.3、Config.groovy)

hibernate {
    // ...
    dialect = 'org.hibernate.spatial.dialect.postgis.PostgisDialect'
}
于 2015-02-18T13:44:23.103 に答える