0

我正在从事 GIS 项目。

我想通过 JSF + Hibernate 制作一个 Web GIS。

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

我看到这个链接 Hibernate-Spatial

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

最后我完成了这些步骤:

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

  2. 为休眠执行此步骤

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

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

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

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

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

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

  6. 在我的项目和我的线和点类和 .hbm.xml 中设置此步骤

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

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

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

    java.lang.UnsupportedOperationException at 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) 在 org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249) 在 org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:334) 在 org.hibernate.persister.entity.AbstractEntityPersister org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1627) 中 org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1695) 中的 .hydrate(AbstractEntityPersister.java:2969)。 org.hibernate.loader 中的 Loader.getRow(Loader.java:1514)。Loader.getRowFromResultSet(Loader.java:725) at org.hibernate.loader.Loader.processResultSet(Loader.java:952) at org.hibernate.loader.Loader.doQuery(Loader.java:920) at 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) at org.hibernate.loader.Loader.list(Loader.java:2362) at 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)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)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)loader.Loader.doQuery(Loader.java:920) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) at org.hibernate.loader.Loader.doList(Loader.java:2551) at org.hibernate .loader.Loader.doList(Loader.java:2537) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367) at org.hibernate.loader.Loader.list(Loader.java:2362) at org. hibernate.hql.internal.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:939) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:229) at org.hibernate.internal.SessionImpl.list( SessionImpl.java:1260) 在 org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)loader.Loader.doQuery(Loader.java:920) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) at org.hibernate.loader.Loader.doList(Loader.java:2551) at org.hibernate .loader.Loader.doList(Loader.java:2537) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367) at org.hibernate.loader.Loader.list(Loader.java:2362) at org. hibernate.hql.internal.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:939) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:229) at org.hibernate.internal.SessionImpl.list( SessionImpl.java:1260) 在 org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)doList(Loader.java:2551) at org.hibernate.loader.Loader.doList(Loader.java:2537) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367) at 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.QueryImpl.list(QueryImpl.java:103) 的 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260)doList(Loader.java:2551) at org.hibernate.loader.Loader.doList(Loader.java:2537) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367) at 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.QueryImpl.list(QueryImpl.java:103) 的 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260)HQLQueryPlan.performList(HQLQueryPlan.java:229) 在 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260) 在 org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)HQLQueryPlan.performList(HQLQueryPlan.java:229) 在 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260) 在 org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)

请帮助我如何解决问题或者是比hibernate-spatial更好的解决方案?

4

1 回答 1

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>

有关connection_finder 的说明,请参阅此链接。

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

于 2015-07-11T23:56:11.363 回答