1

I recently discovered the potential of using JTS library when dealing with geographic types within a project. I'm using hibernate as my ORM (including hibernate spatial).

Before knowing the existence of JTS, I stored coordinates in a custom class called LatLon; whenever I wanted to manage polylines, I created a list of them, e.g. List. I realised how bad it was, speaking in terms of performance when making CRUD operations in the database.

So, as I've told you before, I discovered that my LatLon class could be replaced by the JTS' Point class. I'm starting to implement it and replacing the LatLon attributes, but I've several questions:

  1. I map my classes using XML (not annotations). Is the following correct?

    (Java class)

    ... private Point puntoInicio; ...

    (XML mapping)

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

  2. How do I store Polylines? I haven't found any data type with the name of Polyline. However, I've found others like LineString. Could I use this to represent polylines? How do I map them?

Thank you so much!

Edit: I'm using Hibernate 5.0.7.Final + Hibernate Spatial 5.0.7.Final

Edit 2: Sorry for my delay and for not accepting any answer. I undid the whole modifications some time ago, but I want to modify and implement this way. Thank you for your time and your patience.

joninx
  • 1,775
  • 6
  • 31
  • 59
  • 1
    Yes, polylines are known in GIS as LINESTRING – Tom-db Jan 28 '16 at 10:56
  • How do I map Point and LineString classes in hibernate? I'm getting the following error "Could not instantiate Type: org.hibernate.spatial.JTSGeometryType" when mapping them as org.hibernate.spatial.JTSGeometryType type... – joninx Jan 28 '16 at 11:19
  • 1
    Try so: ` ` – Tom-db Jan 28 '16 at 11:31
  • 1
    See here: See here: http://www.hibernatespatial.org/documentation/documentation/ – Tom-db Jan 28 '16 at 11:37
  • After making that change, I get this exception... "Could not determine type for: org.hibernate.spatial.GeometryType, at table: VIAJES, for columns: [org.hibernate.mapping.Column(VIAJE_POLILINEA)]. Causa: null". This is the mapping: – joninx Jan 28 '16 at 11:57
  • 1
    I'm sorry, but I'm not really a hibernate user :( – Tom-db Jan 28 '16 at 12:05
  • Okay @TommasoDiBucchianico and thanks for your kind help :) – joninx Jan 28 '16 at 12:09

1 Answers1

0

I've been able to make it work not specifying the type of the column and updating Hibernate and Hibernate Spatial to 5. That way, the data is stored as binary. The problem comes now, I've got a class called "Conductor" that, when retrieving data from the database Hibernate throws an exception:

    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
joninx
  • 1,775
  • 6
  • 31
  • 59