2016-04-20 21 views
9

La documentazione per ibernazione 5.1 spaziale non è ancora stata rilasciata (AFAIK) e sto cercando di mantenere le entità con campi geometrici JST su PostgreSQL 9.5 + Postgis 2.2, senza alcuna fortuna.Hibernate 5.1 con mappatura colonne geometria Postgis 2.2

Ho anche notato che non esiste un pacchetto org.hibernate.spatial in hibernate-core-5.1.0. Ho variazioni del seguente annotazione provato:

@javax.persistence.Column(name = "the_geom", columnDefinition = "Geometry") 
public com.vividsolutions.jts.geom.Geometry geom; 

Quando ColumnDefinition è impostato su "Point" ottengo "colonna 'the_geom' è di tipo punto, ma l'espressione è di tipo bytea". Nella documentazione spaziale di ibernazione 4 si dice che l'annotazione @Type non sarebbe necessaria dalle versioni 5+, ma che cosa invece dovrebbe essere usato? Come conservare la geom come una geometria Postgis valida?

+0

Ciao @Mihai Ho lo stesso problema adesso con la stessa configurazione e le stesse dipendenze. Cerco un po 'senza risultati, hai notato qualcosa che guida almeno la causa del problema? – Dario

+0

Ciao @Dario, a causa della mancanza di tempo, ho declassato per ibernare 4.3 per il momento. Sto aspettando che la documentazione ufficiale sia disponibile. –

risposta

0

Dopo aver cercato per un po 'ho trovato una soluzione che si adatta alle mie esigenze (spero anche la tua). A causa del fatto che con la versione 5 tutti i tipi di geometria jts e geolatte sono gestiti direttamente dalla sospensione, è necessario configurare la modalità di sospensione per gestire tali tipi.

Nel mio scenario che gestiscono tutta la configurazione in una classe primavera @Configuration: lì, come indicato nel "esempio 9" di here ho deciso di utilizzare il metodo MetadataBuilder come segue:

@Bean 
public static MetadataBuilder metadataBuilder() { 

    ServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().build(); 
    MetadataSources sources = new MetadataSources(standardRegistry); 
    return sources.getMetadataBuilder(); 
} 

@Bean 
public static MetadataBuilder spatialConfiguration() { 

    JTSGeometryType jtsGeometryType = new JTSGeometryType(PGGeometryTypeDescriptor.INSTANCE); 
    return PersistenceConfiguration.metadataBuilder().applyBasicType(jtsGeometryType); 
} 

In in questo modo tutte le mie geometrie jts (c'è anche l'altra per le geometrie geolatteorg.hibernate.spatial.GeolatteGeometryType) sono mappate correttamente come dichiarate nel mio modello di database.

spera che questo ti può aiutare,

Dario.

+0

Ho deciso di restare con Hibernate 4.3 per il momento, e non ho ancora testato la tua soluzione. Passerò alla 5. * qualche volta nel prossimo futuro e convaliderò questa/accetta risposta. Grazie. –

+0

CON 5.2.3.La versione finale delle geometrie jib hibernate è supportata di default, senza necessità di configurazioni aggiuntive. Sto usando la versione 1.13 di JTS. –