标签: hibernate-spatial

Hibernate Spatial 5 - GeometryType

将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数据库结合使用.

java hibernate postgis hibernate-spatial

26
推荐指数
3
解决办法
2万
查看次数

Hibernate Spatial - 在X公里范围内查询?

我是Hibernate Spatial的新手,我正在尝试对给定半径内的对象执行简单查询.我使用Google地图和其他来源的数据在我的数据库中创建了许多条目,其中的属性与纬度和经度相对应.这个属性在我的Entity类中定义如下:

@Column
@Type(type = "org.hibernate.spatial.GeometryType")
private Point coordinates = null;
Run Code Online (Sandbox Code Playgroud)

我现在正试图弄清楚如何搜索坐标落在距给定点x公里半径范围内的所有实体对象.例如,我想找到落在该点半径50公里范围内的物体(12.34567,-76.54321).但是,我找不到任何可以解释如何在Hibernate Spatial中执行此操作的示例或教程.

任何人都可以给我任何关于如何构建这样的查询的信息吗?

geometry hibernate jpa geospatial hibernate-spatial

12
推荐指数
1
解决办法
6694
查看次数

Spring启动应用程序失败方法org.postgresql.jdbc4.Jdbc4Connection.createClob()尚未实现

我正在使用spring boot命令行运行器应用程序,它挂在PostGIS方言中,下面的堆栈跟踪包含正在发生的事情.我无法理解出现了什么问题,我有hibernate-spatial查询.

2018-04-06 12:11:08.554  INFO 31495 --- [           main] replayer.Main                            : No active profile set, falling back to default profiles: default
2018-04-06 12:11:08.780  INFO 31495 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@39d9314d: startup date [Fri Apr 06 12:11:08 NZST 2018]; root of context hierarchy
2018-04-06 12:11:10.811  INFO 31495 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2018-04-06 12:11:11.149  INFO 31495 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$a0866479] is not eligible for getting …
Run Code Online (Sandbox Code Playgroud)

java postgis hibernate-spatial spring-boot

8
推荐指数
1
解决办法
1万
查看次数

无法使用 Hibernate 在 H2 2.0.202 中存储 UUID

我们使用 H2 进行集成测试已经有一段时间了。现在 H2 2.0.202 已经发布,我们正在尝试将代码库升级到它。我们无法持久保存使用 java.util.UUID 作为类型的实体。考虑下面的例子

public class MyEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private UUID id;
}
Run Code Online (Sandbox Code Playgroud)

如果我们尝试使用 Hibernate 将其保存在 H2 数据库中,则会失败并显示JdbcSQLDataException消息Value too long for column。测试很简单

@DataJpaTest
class H2Test {

  @Autowired MyRepository myRepository;

  @Test
  void testSave() {
    myRepository.save(new MyEntity());
    Assertions.assertThat(myRepository.findAll()).hasSize(1);
  }
}

Run Code Online (Sandbox Code Playgroud)

您可以在PasteBin上找到完整的堆栈跟踪。

我们正在使用 org.hibernate.spatial.dialect.h2geodb.GeoDBDialect,这似乎是此问题的原因之一。如果我们删除它,上面的简单测试用例就可以正常工作,不幸的是我们正在使用空间数据,所以我们需要这种方言。我想知道这是否只是 H2 2.0.202 和 Hibernate 之间缺少兼容性?或者我们可以在配置中做些什么?我在 hibernate jira 中找不到与此问题匹配的问题,而且不知何故我也无法创建一个问题。

hibernate h2 spring-data hibernate-spatial

8
推荐指数
1
解决办法
7405
查看次数

hibernate-spatial:用于检索几何的SQL查询

我正在使用postgresql,hibernate-spatial和postgis,并期望能够使用SqlQuery来检索Geometry对象.

但是,每当我尝试查询点,多边形或几何时,例如

List list = session.createSQLQuery(
    "select geomfromewkt('SRID=1;POINT(1 1)')").list();
Run Code Online (Sandbox Code Playgroud)

我得到了例外:

Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:78)
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:103)
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:328)
    at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:590)
    at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:516)
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:532)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1962)
    at org.hibernate.loader.Loader.doQuery(Loader.java:802)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
    at org.hibernate.loader.Loader.doList(Loader.java:2533)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
    at org.hibernate.loader.Loader.list(Loader.java:2271)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)
Run Code Online (Sandbox Code Playgroud)

hibernate.cfg.xml中:

<property name="dialect">org.hibernatespatial.postgis.PostgisDialect</property>
Run Code Online (Sandbox Code Playgroud)

这不是hibernate-spatial产品的一部分,还是我做错了什么?

谢谢,保罗.

相关库/版本:

  • 休眠核心,3.6.0.Final.jar
  • PostgreSQL相关9.0-801.jdbc4.jar
  • 冬眠-空间的PostGIS-1.1.1.jar
  • 冬眠空间-1.1.1.jar
  • PostGIS的-JDBC-1.3.3.jar
  • JTS-1.12.jar

geometry hibernate postgis hibernate-spatial

7
推荐指数
1
解决办法
3423
查看次数

使用JPA Criteria Api和hibernate spatial 4

鉴于这里的查询示例:http://www.hibernatespatial.org/tutorial-hs4.html

Query query = em.createQuery("select e from Event e where within(e.location, :filter) = true", Event.class);
query.setParameter("filter", filter);
Run Code Online (Sandbox Code Playgroud)

是否可以使用jpa 2标准api重写查询?(我不确定我应该如何处理该within(e.location, :filter)部分.

java hibernate jpa criteria-api hibernate-spatial

7
推荐指数
2
解决办法
3622
查看次数

Hibernate Spatial - '遇到无效的endian标志值'异常

我正试图在PostgreSQL 9.3上的Hibernate Spatial 4.0中运行一个简单的查询.我在表中有许多具有纬度/经度值的对象,我正在尝试查询属于特定纬度/经度的给定半径范围内的对象.几何值似乎没有任何问题持久化,并在我的实体类中定义如下:

@Column(columnDefinition = "Geometry", nullable = true)
@Type(type = "org.hibernate.spatial.GeometryType")
private Point coordinates = null;
Run Code Online (Sandbox Code Playgroud)

持久保存具有coordinates值集的对象时,我没有任何错误.但是,当我运行查询时,我看到以下异常:

    javax.servlet.ServletException: javax.servlet.ServletException: javax.ejb.EJBTransactionRolledbackException: org.hibernate.exception.GenericJDBCException: could not extract ResultSet

    <snip />

org.postgresql.util.PSQLException: ERROR: Invalid endian flag value encountered.
    org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
    org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
    org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
    org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
    org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)
    org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:462)
    org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56)
    org.hibernate.loader.Loader.getResultSet(Loader.java:2031)
    org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1832)
    org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
    org.hibernate.loader.Loader.doQuery(Loader.java:899)
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
    org.hibernate.loader.Loader.doList(Loader.java:2516)
    org.hibernate.loader.Loader.doList(Loader.java:2502)
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332)
    org.hibernate.loader.Loader.list(Loader.java:2327)
    org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490)
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
    org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
    org.hibernate.internal.SessionImpl.list(SessionImpl.java:1268)
    org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
    org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:264)
Run Code Online (Sandbox Code Playgroud)

我正在运行的查询如下所示:

Query query = this.entityManager
        .createQuery(
                "SELECT v FROM MyEntity v WHERE within(v.coordinates, :filter) = true",
                MyEntity.class);
query.setParameter("filter", point); …
Run Code Online (Sandbox Code Playgroud)

java postgresql hibernate postgis hibernate-spatial

7
推荐指数
1
解决办法
2020
查看次数

Hibernate/spatial 的规范/谓词过滤实体,无论它是否在半径内

我想在谓词/规范中重写以下查询,以便我可以链接它们。

此查询过滤特定区域内我定义的所有 OptEvent 实体

@Query(value = "SELECT * FROM opt_event WHERE ST_DWithin(cast(opt_event.locationpoint as geography),ST_SetSRID(ST_Point(?2, ?1),4326), 100000);", nativeQuery = true)
    public Set<OptEvent> findAllEventsInRange(double longitude, double latitude);
Run Code Online (Sandbox Code Playgroud)

通常我会写这样的规范,然后可以将它们串在一起。取决于是否应用过滤器。

public static Specification<OptEvent> filterArea(Double longitude, Double latitude) {
        return new Specification<OptEvent>() {
            @Override
            public Predicate toPredicate(Root<OptEvent> root, CriteriaQuery<?> query, CriteriaBuilder builder) {

            SpatialRelateExpression geomExpression = SpatialRestrictions.within("locationpoint ", area);
            //this is the only thing i could find, but i have no idea if its the right path or how i can transform it to the …
Run Code Online (Sandbox Code Playgroud)

hibernate spatial spring-data-jpa hibernate-spatial spring-boot

7
推荐指数
1
解决办法
1926
查看次数

Hibernate空间函数不断抛出意外的AST节点

我正在尝试查询我的实体之间的空间关系,但一直得到这个异常:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: ( near line 1,
Run Code Online (Sandbox Code Playgroud)

我的实体工作正常,映射也是如此.我相信我的查询有问题:

SELECT r FROM Regiao r, Imovel i WHERE r.nivel = :nivel AND contains(r.regiao, i.latlng)
Run Code Online (Sandbox Code Playgroud)

其中r.regiao和i.latln都是GeometryType映射的(一个是Polygon,另一个是Point.

Ps.:当我问这个问题时,我终于理解了这个问题.

java jpql hibernate-4.x hibernate-spatial

6
推荐指数
1
解决办法
1634
查看次数

如何配置 spring-boot 项目以使用内存空间数据库进行测试?

这是我现在的配置。我想使用休眠空间在生产中使用 postgis。

spring:
  profiles: production

  datasource:
    platform: postgres
    url: jdbc:postgresql://192.168.99.100:5432/dragon
    username: dragon
    password: dragon

  database:
    driverClassName: org.postgresql.Driver

  jpa:
    database: POSTGRESQL
    database-platform: org.hibernate.spatial.dialect.postgis.PostgisDialect
    show-sql: true
    hibernate:
      ddl-auto: update

---

spring:
  profiles: development
  datasource: SpatialInMemoryDb

  jpa:
    database-platform: org.hibernate.spatial.dialect.h2geodb.GeoDBDialect
    hibernate:
      ddl-auto: create-drop
Run Code Online (Sandbox Code Playgroud)

对于所有发现的测试都是 h2gis 项目。

public class SpatialInMemoryDb extends SingleConnectionDataSource{



    public SpatialInMemoryDb() {
        setDriverClassName("org.h2.Driver");
        setUrl("jdbc:g2:mem:test");
        setSuppressClose(true);
    }

    @Override
    public Connection getConnection() throws SQLException {
        System.out.println("************");
        Connection connection =  super.getConnection();
        try (Statement st = connection.createStatement()) {
            // Import spatial functions, domains and drivers
            // …
Run Code Online (Sandbox Code Playgroud)

java spring h2 hibernate-spatial

6
推荐指数
2
解决办法
5502
查看次数