3

Point データ型を postgres DB に永続化しようとすると、エラー org.postgresql.util.PSQLException: ERROR: column "pointColumn" is of type point but expression is of type geometry で失敗します

これが私のポジョスナップピットです

@Type(type="org.hibernate.spatial.GeometryType")
@Column(columnDefinition="Point", nullable = true)
private Point pointColumn;

これが私のドライバーと方言のプロパティです

driverClass=org.postgresql.Driver

方言=org.hibernate.spatial.dialect.postgis.PostgisDialect

これが私の空間バージョンの詳細です

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-spatial</artifactId>
   <version>4.3</version>
</dependency>
<dependency>
   <groupId>com.vividsolutions</groupId>
   <artifactId>jts</artifactId>
   <version>1.13</version>
</dependency>
        

以下のように GeometryType を jdbc Configuration に登録しました

GeometryType geometryType = new GeometryType();
configuration.registerTypeOverride(geometryType);

この問題でさえ、Polygon、LineString、Point、MultiPoint、MultiPolygon に当てはまります...

構成が不足していますか、それとも Geometry Type の実装から予想される動作ですか?

4

2 に答える 2

0

com.vividsolutions.jts.geom使用する適切なジオメトリ クラスは、パッケージ内にあります。HS は JTS ジオメトリを DB ネイティブ構造にマップするため、posgis クラスを使用しないでください。これは、アプリケーションを DB 非依存にするためです (JPA API の主なポイントの 1 つ)。

HS の概要を参照してください。

Hibernate Spatial は、ジオメトリ モデルとして Java Topology Suite (JTS) を使用します。JTS は、OpenGIS Simple Features Implementation Specification for SQLv の実装です。1.1 (SFS)。この仕様は、空間データをサポートするほとんどの RDBMS に実装されています。また、SQL/MM Part 3: Spatial (ISO/IEC 13249-3) の前身の直接の前身でもあります。

これは、ジオメトリ タイプを処理するgvNIX サンプル アプリケーション(オンライン デモ) です。これは、3 つのジオメトリ プロパティを宣言するJPA エンティティです。

...
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
...
...
public class Owner extends AbstractPerson {

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

    @Type(type = "org.hibernate.spatial.GeometryType")
    private LineString distance;

    @Type(type = "org.hibernate.spatial.GeometryType")
    private Polygon area;
}

幸運を!!

于 2015-09-14T10:35:08.217 に答える