【问题标题】:Spring Java JPA: Using specification with hibernate spatialSpring Java JPA:使用带有休眠空间的规范
【发布时间】:2017-01-02 10:25:16
【问题描述】:

我正在将 Spring Boot 用于我正在使用空间数据的项目。对于空间数据,我使用的是 Hibernate Spatial。这是我的实体的配置:

@Column(name="LOCATION",columnDefinition="geometry(Point,4326)")
private Point location;

其中Point 属于com.vividsolutions.jts.geom.Point 类。这还包括一个 getter 和 setter。

当使用普通repository.findOne("id") 检索此实体时,这还包括我的结果中的位置,映射到一个点。但是,稍后我需要在系统中添加一些动态查询系统。因此,我还使用继承自org.springframework.data.jpa.domain.Specification 的类查询数据。使用此规范时,位置始终为null。 SQL 调试信息显示该位置是从数据库中检索到的,但由于某种原因,它没有映射到我的实体对象。

我的 spring-boot 版本是 1.4.0.RELEASE。数据来自 mysql 数据库。

任何使用Specification 检索几何数据的帮助将不胜感激。

【问题讨论】:

    标签: java spring hibernate spring-data-jpa hibernate-spatial


    【解决方案1】:

    我使用 Mysql Spatial 进行了相同的测试,并通过使用 Specifications 应用查询来检索数据。我可以检索空间数据。

    以下是您可以尝试的几个指针。

    1. 确保您已设置支持空间查询和类型的方言。

      spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect

    2. 无需定义列定义。

    删除columnDefinition="geometry(Point,4326)

    【讨论】:

    • 感谢您的回答。不幸的是,这无济于事。我认为问题在于 org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor。我在生成的模型中看不到任何几何类型的属性。我是否忘记了插件定义中的某些内容?我正在使用 Maven。
    • 当我将定义从点更改为几何时,它被添加到元模型中,但值保持为空。
    • @Cerebres BTW 您正在使用哪个版本的 spring-boot 和 hibernate。我测试了 spring-boot 2.0.0 快照和休眠 5.2.5
    • 我正在使用:Spring boot 1.4.0.RELEASE Hibernate-spatial 5.2.2.Final
    • 请使用 org.hibernate.spatial.dialect.mysql.MySQLSpatialDialect。它是罪魁祸首。我以前使用过 org.hibernate.spatia‌​l.dialect.mysql.MySQ‌​L56InnoDBSpatialDiale‌​ct,它给了我错误。
    猜你喜欢
    • 2021-06-08
    • 2017-08-19
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2020-11-13
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多