Hibernate Spatial 5 - GeometryType

Den*_*ich 26 java hibernate postgis hibernate-spatial

将Hibernate-spatial升级到V5.0.0.CR2后,以下声明不再起作用:

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

与:

org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.spatial.GeometryType]
Run Code Online (Sandbox Code Playgroud)

正如我所看到的,Jar-File中不再存在该类.GeometryType发生了什么,它是如何被替换的?或者是否包含另一个jar文件?

编辑:澄清.我正在将Hibernate-Spatial与PostgreSQL-Postgis数据库结合使用.

Den*_*ich 32

那么解决方案太容易看到了.只需删除@Type注释,因此声明如下所示:

@Column(columnDefinition = "geometry(Point,4326)")
private Point position;
Run Code Online (Sandbox Code Playgroud)

来源:

注意@Type注释.这告诉Hibernate,location属性是Geometry类型.@Type注释是特定于Hibernate的,并且是唯一需要的非JPA注释.(在Hibernate的未来版本(版本5及更高版本)中,将不再需要显式声明几何值类型的属性.)


Gan*_*nan 6

Denis上面提出的解决方案在Hiberate 5 spatial和Mysql上对我没有用.但是以下注释对我有用

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


  @Column(name = "pointlocation",columnDefinition="Point")
  private Point pointlocation;
Run Code Online (Sandbox Code Playgroud)


Hop*_*ing 5

对于 Hibernate Spatial 5.2.x,您所需要的只是实体中的以下内容。

private Point location;

您不需要像上述解决方案那样的 columnDefinition 或 Type 。

一些额外的细节并检查以上是否有效

  • 一旦您desc table_name在 mysql 中运行您的设置并使用 ,您应该会看到geometry的字段类型。这表明您的休眠到数据库映射工作正常。
  • 现在尝试从 java 创建一个实体和 repo.save(entity) 并且您的实体应该可以正常保存而没有任何错误。

如果上述设置不能正常工作,您通常会收到错误消息

数据截断:无法从您发送到 GEOMETRY 字段 Blockquote 的数据中获取几何对象

希望能帮助别人节省我浪费的 6 个小时!

  • 完美,正是我要找的。上面的其他答案不适用于 Hibernate 5.3,一旦我删除了 columnDefinition,它就可以完美运行。 (2认同)