2016-04-20 81 views
9

Dokumentacja dla hibernacji 5.1 spatial nie została jeszcze wydana (AFAIK) i próbuję utrwalać jednostki z polami geometrii JST do PostgreSQL 9.5 + Postgis 2.2, bez powodzenia.Hibernate 5.1 z kolumnami kolumny Postgis 2.2 mapowania

Zauważyłem również, że nie ma pakietu org.hibernate.spatial w hibernate-core-5.1.0. Próbowałem odmiany dopiskiem:

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

Kiedy columnDefinition jest ustawiony na „Point” otrzymuję „kolumny«the_geom»jest punktem typu ale wyrażenie jest typu bytea”. W dokumentacji hibernacji przestrzennej 4 jest powiedziane, że adnotacja @ Type nie byłaby potrzebna w wydaniach 5+, ale co należy zamiast tego zastosować? Jak zapisać geom jako prawidłową geometrię Postgis?

+0

Witam @Mihai Mam teraz ten sam problem z tą samą konfiguracją i zależnościami. Szukałem przez chwilę bez rezultatu, czy zauważyłeś coś, co napędza co najmniej przyczynę problemu? – Dario

+0

Witam @Dario, z powodu braku czasu, w którym na chwilę przeszedłem do hibernacji 4.3. Czekam na oficjalną dokumentację. –

Odpowiedz

0

Po pewnym czasie znalazłem rozwiązanie, które pasuje do moich potrzeb (mam nadzieję, że również twoje). Z uwagi na to, że w wersji 5 wszystkie typy geometrii jts i geolatte mogą być zarządzane bezpośrednio przez hibernację, należy skonfigurować hibernację, aby zarządzać tymi typami.

W moim scenariuszu zarządzać całą konfigurację w klasie wiosna @Configuration: tam, jak pokazano w „przykład 9” z here postanowiłem wykorzystać podejście MetadataBuilder następująco:

@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); 
} 

W w ten sposób wszystkie moje geometrie jts (są też inne dla geolatte geometry org.hibernate.spatial.GeolatteGeometryType) są mapowane poprawnie, jak zadeklarować w moim modelu bazy danych.

Mam nadzieję, że to pomoże,

Dario.

+0

Zdecydowałem się na chwilę pozostać przy hibernacji 4.3, a jeszcze nie przetestowałem twojego rozwiązania. Przeprowadzę migrację do 5. * w niedalekiej przyszłości i sprawdzę poprawność tej/zaakceptowanej odpowiedzi. Dzięki. –

+0

Z wersją 5.2.3. Ostateczna wersja geometrii hibernacji jts jest obsługiwana domyślnie, bez potrzeby dodatkowej konfiguracji. Używam wersji JTS 1.13. –