相关疑难解决方法(0)

PostGIS Geometry save:"遇到无效的endian标志值."

我有一个Spring Roo + Hibernate项目,该项目从客户端应用程序获取JTS着名文本(WKT)字符串输入,将其转换为JTS Geometry对象,然后尝试将其写入PostGIS数据库.我在JDBC连接和类型方面遇到了一些问题,但这些问题似乎已经解决了:

@Column(columnDefinition = "Geometry", nullable = true) 
private Geometry centerPoint;
Run Code Online (Sandbox Code Playgroud)

转换确实:

Geometry geom = new WKTReader(new GeometryFactory(new PrecisionModel(), 4326)).read(source);
Run Code Online (Sandbox Code Playgroud)

但是现在当Hibernate尝试将我的Geometry对象写入数据库时​​,我收到一个错误:

2012-08-31 21:44:14,096 [tomcat-http--18] ERROR org.hibernate.util.JDBCExceptionReporter - Batch entry 0 insert into land_use (center_point, version, id) values ('<stream of 1152 bytes>', '0', '1') was aborted.  Call getNextException to see the cause.
2012-08-31 21:44:14,096 [tomcat-http--18] ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: Invalid endian flag value encountered.
Run Code Online (Sandbox Code Playgroud)

很明显,该错误与二进制表示有关,二进制表示可能是作为具有某种字节顺序的众所周知的二进制(WKB)生成的.然而,随着Hibernate将所有持久性隐藏起来,我无法确定事情的发展方向.

几天来我一直在与这种几何学作斗争,关于这些错误的信息很少,所以有没有人有任何好主意?我可以在某处指定字节顺序(Hibernate或PostGIS),还是以不同的格式(WKT)存储?

编辑:我还应该提到我正在使用最新的一切,通常似乎是兼容的:

  • Spring 3.1.1,Roo 1.2.1
  • 休眠3.6.9
  • hibernate-spatial 4.0-M1 …

geometry spring hibernate jts endianness

8
推荐指数
3
解决办法
8327
查看次数

Hibernate使用PostGIS Geometry持续失败

与上一个问题相关.我有一个使用Hibernate的Spring Roo应用程序,使用JTS将Geometry对象写入PostGIS数据库.我相信我已经修复了我在定义Geometry对象时遇到的问题,现在Hibernate正在执行它的persist()方法,但是在它遇到数据库之前就出现了问题,我在下面得到了例外.

这是一些有趣的线条.首先来自Hibernate日志,要保留的对象,然后是SQL查询(可能是?被替换):

...
DEBUG org.hibernate.pretty.Printer - com.test.LandUse{id=1, centerPoint=POINT (5 6), version=0}
...
DEBUG org.hibernate.SQL - insert into land_use (center_point, version, id) values (?, ?, ?)
...
Run Code Online (Sandbox Code Playgroud)

然后会发生更多事情,尽管没有什么明显的坏事.但是我没有看到任何"最终"SQL,并且尝试回滚事务.然后:

org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$afterReturning$org_springframework_transaction_aspectj_AbstractTransactionAspect$3$2a73e96c(AbstractTransactionAspect.aj:78)
    at com.test.LandUse_Roo_Jpa_ActiveRecord.ajc$interMethod$com_test_LandUse_Roo_Jpa_ActiveRecord$com_test_LandUse$persist(LandUse_Roo_Jpa_ActiveRecord.aj:44)
    at com.test.LandUse.persist(LandUse.java:1)
    at com.test.LandUse_Roo_Jpa_ActiveRecord.ajc$interMethodDispatch1$com_test_LandUse_Roo_Jpa_ActiveRecord$com_test_LandUse$persist(LandUse_Roo_Jpa_ActiveRecord.aj)
    at com.test.LandUseController_Roo_Controller.ajc$interMethod$com_test_LandUseController_Roo_Controller$com_test_LandUseController$create(LandUseController_Roo_Controller.aj:29)
    at com.test.LandUseController.create(LandUseController.java:1)
...
Caused by: javax.persistence.RollbackException: Error while committing the transaction
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93)
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512)
    ... 54 …
Run Code Online (Sandbox Code Playgroud)

spring persistence hibernate postgis rollback

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

org.hibernate.MappingException:否JDBC类型的方言映射:2002

我在org.hibernate.MappingException: No Dialect mapping for JDBC type: 2002尝试执行JPA nativeQuery以获取几何字段类型时遇到问题。

我正在使用Oracle和org.hibernatespatial.oracle.OracleSpatial10gDialect

几何字段映射为:

@Column(name="geometry")  
@Type(type = "org.hibernatespatial.GeometryUserType")  
private Geometry geometry;

// ...

List<Object> listFeatures = new LinkedList<Object>();

Query query = entityManager.createNativeQuery(
   "SELECT "+ slots +" , geometry FROM  edtem_features feature, edtem_dades dada WHERE" +
   " feature."+ tematic.getIdGeomField() +" = dada."+ tematic.getIdDataField()+ 
   " AND dada.capesid= "+ tematic.getCapa().getId() +
   " AND feature.geometriesid= "+ tematic.getGeometria().getId());
listFeatures.addAll(query.getResultList());
Run Code Online (Sandbox Code Playgroud)

这是我在spring + struts2上的休眠配置

<bean id="entityManagerFactory"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />

    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property …
Run Code Online (Sandbox Code Playgroud)

java oracle hibernate spatial

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