【问题标题】:Geographic Data types in JTSJTS 中的地理数据类型
【发布时间】:2016-01-28 08:58:33
【问题描述】:

我最近发现在项目中处理地理类型时使用 JTS 库的潜力。我使用休眠作为我的 ORM(包括休眠空间)。

在知道 JTS 的存在之前,我将坐标存储在一个名为 LatLon 的自定义类中;每当我想管理折线时,我都会创建一个列表,例如列表。在数据库中进行 CRUD 操作时,就性能而言,我意识到它有多糟糕。

所以,正如我之前告诉过你的,我发现我的 LatLon 课程可以被 JTS 的 Point 课程取代。我开始实现它并替换 LatLon 属性,但我有几个问题:

  1. 我使用 XML(不是注释)映射我的类。以下是正确的吗?

    (Java 类)

    ... private Point puntoInicio; ...

    (XML 映射)

    <property name="puntoInicio" type="org.hibernate.spatial.GeometryType" column="RUTA_PUNTOINICIO" not-null="true" />

  2. 如何存储折线?我没有找到任何名为折线的数据类型。但是,我发现了像 LineString 这样的其他人。我可以用它来表示折线吗?如何映射它们?

非常感谢!

编辑:我正在使用 Hibernate 5.0.7.Final + Hibernate Spatial 5.0.7.Final

编辑 2:对于我的延误和不接受任何答案,我深表歉意。我前段时间撤消了整个修改,但我想以这种方式修改和实现。感谢您的时间和耐心。

【问题讨论】:

  • 是的,折线在 GIS 中称为 LINESTRING
  • 如何在休眠中映射 Point 和 LineString 类?将它们映射为 org.hibernate.spatial.JTSGeometryType 类型时出现以下错误“无法实例化类型:org.hibernate.spatial.JTSGeometryType”...
  • 试试吧:<property name="puntoInicio" type="org.hibernate.spatial.GeometryType"> <column name="RUTA_PUNTOINICIO" /> </property>
  • 对不起,我不是真正的休眠用户 :(

标签: java hibernate jts hibernate-spatial


【解决方案1】:

在不指定列类型并将 Hibernate 和 Hibernate Spatial 更新为 5 的情况下,我已经能够使其工作。这样,数据以二进制形式存储。现在问题来了,我有一个名为“Conductor”的类,当从数据库中检索数据时,Hibernate 会抛出异常:

    Error Exception: could not deserialize
org.hibernate.type.SerializationException: could not deserialize
    at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:243)
    at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287)
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:138)
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:113)
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:27)
    at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:53)
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:224)
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:300)
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2727)
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1728)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1654)
    at org.hibernate.loader.Loader.getRow(Loader.java:1543)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:727)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
    at org.hibernate.loader.Loader.doQuery(Loader.java:930)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)
    at org.hibernate.loader.Loader.doList(Loader.java:2611)
    at org.hibernate.loader.Loader.doList(Loader.java:2594)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2423)
    at org.hibernate.loader.Loader.list(Loader.java:2418)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)
    ...
    //stuff from my webapp
    ...
Caused by: java.io.StreamCorruptedException: invalid stream header: 01303130
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:309)
    at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:299)
    at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:218)
    ... 85 more

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多