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

Sha*_*man 7 java postgresql hibernate postgis hibernate-spatial

我正试图在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)

在StackOverflow上遇到了这个提到相同错误的问题,但是我正在coordinates以与答案中提到的方式相同的方式声明我的属性,但仍然会出现此错误.

为了记录,我尝试使用PostGIS 1.5.2和PostGIS 2.1.0.我也尝试过不同版本的PostgreSQL JDBC驱动程序,从8.4到9.3.无论库版本如何,我仍然会遇到这个问题.

任何人都可以了解这里可能发生的事情吗?我的查询错了吗?我的财产没有正确定义吗?还有什么我应该尝试的吗?我完全陷入困境,不知道这里可能出现什么问题.任何建议将不胜感激.

Ser*_*eyB 5

试试这个:

@Column(columnDefinition="Geometry")
@Type(type = "org.hibernatespatial.GeometryUserType")
private Point point;
Run Code Online (Sandbox Code Playgroud)