使用oracle的hibernate Spatial无法正常工作?

时间:2015-07-11 14:53:25

标签: hibernate maven oracle-spatial hibernate-spatial

我正在从事GIS项目。

我希望通过JSF + Hibernate生成Web GIS。

My Spatial数据位于Oracle-Spatial 12c中,对于某些空间分析,我必须连接到Oracle DB并插入更新空间表。

我看到这个链接Hibernate-Spatial

我首先尝试使用Net Beans 8.02中的Maven项目执行此操作但不正常工作!!

最后我做了这些步骤:

  1. 使用带有hibernate 4.3和JSF的net Beans 8.02创建一个Web应用程序

  2. 为Hibernate执行此步骤

    https://netbeans.org/kb/docs/web/hibernate-webapp.html

  3. 从此链接下载Geo-tools的jar文件并添加到我的Project

    http://sourceforge.net/projects/geotools/files/

  4. 从此链接下载hibernate-spatial 4.3的Jar文件和ojdbc7

    http://www.hibernatespatial.org/documentation/01-download/01-releases/

  5. 将两个空间表添加到我的项目(LINE POINT)

  6. 在我的项目中设置此步骤以及我的Line和point Class以及.hbm.xml

    http://www.hibernatespatial.org/documentation/03-dialects/05-oracle/

    http://www.hibernatespatial.org/documentation/documentation/

  7. 当我在net Beans中构建我的项目并尝试从此行查询此错误时显示

      

    java.lang.UnsupportedOperationException   在org.hibernate.spatial.GeometrySqlTypeDescriptor.getExtractor(GeometrySqlTypeDescriptor.java:57)   at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:263)   at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:259)   at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)   在org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:334)   在org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2969)   在org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1695)   在org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1627)   在org.hibernate.loader.Loader.getRow(Loader.java:1514)   在org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:725)   在org.hibernate.loader.Loader.processResultSet(Loader.java:952)   在org.hibernate.loader.Loader.doQuery(Loader.java:920)   在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)   在org.hibernate.loader.Loader.doList(Loader.java:2551)   在org.hibernate.loader.Loader.doList(Loader.java:2537)   在org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367)   在org.hibernate.loader.Loader.list(Loader.java:2362)   在org.hibernate.hql.internal.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:939)   在org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:229)   在org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260)   在org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)

  8. 请帮我解决问题或者解决问题 是一个比hibernate-spatial更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

看起来它使用了错误的方言。 Hibernate Spatial(HS)4.3的OracleSpatial10gDialect将处理那些GeometrySqlTypeDescriptor重新映射到实现SqlTypeDescriptor.getExtractor的SDOGeometryTypeDescriptor(参见HS 4.3中的remapSqlTypeDescriptor函数)。 因此,请检查hibernate / persistence.xml配置以获取下一个属性:

<property name="hibernate.dialect">org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect</property>
<property name="hibernate.spatial.connection_finder">org.hibernate.spatial.dialect.oracle.DefaultConnectionFinder</property>

请参阅此链接了解explanation of connection_finder

请注意,您必须使用HS 4.3,因为您使用的是Hibernate 4.3版。对于父亲问题,请记住,此版本的HS已在Oracle 10g和11g上进行了测试,但它没有提及Oracle 12c。