首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate空间5- GeometryType

Hibernate空间5- GeometryType
EN

Stack Overflow用户
提问于 2015-07-15 20:32:57
回答 7查看 25.4K关注 0票数 30

将Hibernate-spatial升级到5.0.0.CR2版本后,以下声明不再工作:

代码语言:javascript
复制
@Column(columnDefinition = "geometry(Point,4326)")
@Type(type = "org.hibernate.spatial.GeometryType")
private Point position;

有:

代码语言:javascript
复制
org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.spatial.GeometryType]

正如我所看到的,这个类不再存在于Jar文件中。GeometryType发生了什么事,它是如何被替换的?或者还有另一个jar文件要包含?

编辑:为了澄清。我使用Hibernate-Spatial与PostgreSQL数据库相结合。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-09-20 15:15:51

这个解决方案太容易看到了。只需删除@Type注释即可,因此声明如下所示:

代码语言:javascript
复制
@Column(columnDefinition = "geometry(Point,4326)")
private Point position;

来源

注意@Type注释。这就通知Hibernate位置属性是几何类型的。@Type注释是Hibernate特有的,是唯一需要的非JPA注释。(在Hibernate的未来版本(版本5及更高版本)中,不再需要显式声明几何值属性的类型。)

票数 39
EN

Stack Overflow用户

发布于 2016-01-20 13:07:16

以上Denis建议的解决方案在Hiberate 5 spatial和Mysql上不适用于我。然而,下面的注释对我有效

代码语言:javascript
复制
  @Column(name = "location",columnDefinition="Geometry")
  private Geometry location;


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

如果您正在运行Hibernate 5.3+,您可以跳过列定义。

代码语言:javascript
复制
  @Column(name = "location")
  private Geometry location;


  @Column(name = "pointlocation")
  private Point pointlocation;
票数 8
EN

Stack Overflow用户

发布于 2018-05-02 10:01:25

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

private Point location;

您不需要像上面提到的解决方案那样使用columnDefinition或Type。

一些额外的细节和检查,看上面是否有效。

  • 一旦您在mysql中运行了安装程序并使用了desc table_name,您就会看到几何图形的字段类型。这表明您的hibernate到数据库映射运行良好。
  • 现在,尝试从java创建一个实体和repo.save(实体),您的实体应该保存得很好,不会有任何错误。

如果上面的设置不能正常工作,您通常会得到错误。

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31440496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档