web-dev-qa-db-ja.com

Hibernate Spatial 5-GeometryType

Hibernate-spatialをバージョン5.0.0.CR2にアップグレードした後、次の宣言は機能しなくなりました。

@Column(columnDefinition = "geometry(Point,4326)")
@Type(type = "org.hibernate.spatial.GeometryType")
private Point position;

と:

org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.spatial.GeometryType]

私が見ることができるように、クラスはもうJar-Fileに存在しません。 GeometryTypeはどうなりましたか、またどのように置き換えられますか?または、含める別のjarファイルがありますか?

編集:説明のため。 Hibernate-SpatialをPostgreSQL-Postgisデータベースと組み合わせて使用​​しています。

26
Denis Lukenich

まあ解決策は見やすいです。 @Typeアノテーションを削除するだけで、宣言は次のようになります。

@Column(columnDefinition = "geometry(Point,4326)")
private Point position;

ソース

@Typeアノテーションに注意してください。これにより、場所属性のタイプがジオメトリであることがHibernateに通知されます。 @TypeアノテーションはHibernate固有であり、必要な非JPAアノテーションのみです。 (Hibernateの将来のバージョン(バージョン5以降)では、ジオメトリ値属性のタイプを明示的に宣言する必要がなくなります。)

32
Denis Lukenich

上記のデニスが提案した解決策は、Hibernate 5空間およびMysqlでは機能しませんでした。しかし、次の注釈は私のために働いた

  @Column(name = "location",columnDefinition="Geometry")
  private Geometry location;


  @Column(name = "pointlocation",columnDefinition="Point")
  private Point pointlocation;
6
Ganesh Krishnan

Hibernate Spatial 5.2.xに必要なのは、エンティティ内の以下のものだけです。

private Point location;

上記のソリューションのようにcolumnDefinitionやTypeは必要ありません。

いくつかの追加の詳細と、上記が機能するかどうかを確認するチェック

  • セットアップを実行し、desc table_namemysqlでは、フィールドタイプgeometryが表示されます。これは、休止状態からデータベースへのマッピングが正常に機能していることを示しています。
  • ここで、Java=からエンティティとrepo.save(entity)を作成しようとすると、エンティティはエラーなしで正常に保存されます。

上記のセットアップがうまく機能しなかった場合、通常はエラーが発生します

データの切り捨て:GEOMETRYフィールドBlockquoteに送信したデータからジオメトリオブジェクトを取得できません

誰かが私が無駄にした6時間を節約できることを願っています!

4
HopeKing

だから私は数日間この問題と闘ってきました、問題は私が最も近い隣人などの効率的な距離クエリを実行するためにデータベースタイプをpostgisタイプのものにしたかったということです。最後にそれを行う方法を見つけましたコミュニティと共有したかったので、問題の解決策を含むデモプロジェクトを作成しました。

私のセットアップは、Postgis、Spring boot jpa、Hibernate 5 +、Hibernate-spatial 5+を備えたPostgreSQLデータベースであり、残りの出力への変換も追加されました。

プロジェクトは https://github.com/Wisienkas/springJpaGeo にあります

あなたが求めていた重要なコードはこれでした:

@type(type = "jts_geometry")
private Point point;
3
Wisienkas

Hibernate 4.3.6とhibernate spatial 5.2.2を使用しています。上記で提案した解決策は私にとってはうまくいきませんでした。ただし、Hibernate Spatial 4.3を追加すると、以下のコードは機能しました

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