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データベースと組み合わせて使用しています。
まあ解決策は見やすいです。 @Typeアノテーションを削除するだけで、宣言は次のようになります。
@Column(columnDefinition = "geometry(Point,4326)")
private Point position;
ソース :
@Typeアノテーションに注意してください。これにより、場所属性のタイプがジオメトリであることがHibernateに通知されます。 @TypeアノテーションはHibernate固有であり、必要な非JPAアノテーションのみです。 (Hibernateの将来のバージョン(バージョン5以降)では、ジオメトリ値属性のタイプを明示的に宣言する必要がなくなります。)
上記のデニスが提案した解決策は、Hibernate 5空間およびMysqlでは機能しませんでした。しかし、次の注釈は私のために働いた
@Column(name = "location",columnDefinition="Geometry")
private Geometry location;
@Column(name = "pointlocation",columnDefinition="Point")
private Point pointlocation;
Hibernate Spatial 5.2.xに必要なのは、エンティティ内の以下のものだけです。
private Point location;
上記のソリューションのようにcolumnDefinitionやTypeは必要ありません。
いくつかの追加の詳細と、上記が機能するかどうかを確認するチェック
desc table_name
mysqlでは、フィールドタイプgeometryが表示されます。これは、休止状態からデータベースへのマッピングが正常に機能していることを示しています。上記のセットアップがうまく機能しなかった場合、通常はエラーが発生します
データの切り捨て:GEOMETRYフィールドBlockquoteに送信したデータからジオメトリオブジェクトを取得できません
誰かが私が無駄にした6時間を節約できることを願っています!
だから私は数日間この問題と闘ってきました、問題は私が最も近い隣人などの効率的な距離クエリを実行するためにデータベースタイプをpostgisタイプのものにしたかったということです。最後にそれを行う方法を見つけましたコミュニティと共有したかったので、問題の解決策を含むデモプロジェクトを作成しました。
私のセットアップは、Postgis、Spring boot jpa、Hibernate 5 +、Hibernate-spatial 5+を備えたPostgreSQLデータベースであり、残りの出力への変換も追加されました。
プロジェクトは https://github.com/Wisienkas/springJpaGeo にあります
あなたが求めていた重要なコードはこれでした:
@type(type = "jts_geometry")
private Point point;
Hibernate 4.3.6とhibernate spatial 5.2.2を使用しています。上記で提案した解決策は私にとってはうまくいきませんでした。ただし、Hibernate Spatial 4.3を追加すると、以下のコードは機能しました
@Type(type="org.hibernate.spatial.GeometryType")
private Point location;