2016-04-20 72 views
9

hibernate 5.1 spatial的文檔尚未發佈(AFAIK),我試圖用JST幾何字段將實體持久化到PostgreSQL 9.5 + Postgis 2.2,沒有任何運氣。Hibernate 5.1與Postgis 2.2幾何列映射

我也注意到在hibernate-core-5.1.0中沒有org.hibernate.spatial包。我嘗試了以下標註的變化:

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

當columnDefinition設置爲「點」我得到的「列‘the_geom’的類型是點,但表達BYTEA類型」。在hibernate spatial 4文檔中,據說在版本5+中不需要@Type註釋,但是應該使用什麼呢?如何將geom存儲爲有效的Postgis幾何?

+0

嗨@Mihai我現在有同樣的問題,相同的配置和依賴關係。我搜索了一段時間沒有任何結果,你是否發現了至少導致問題原因的因素? – Dario

+0

嗨@Dario,由於缺乏時間我暫時降級到休眠4.3。我正在等待官方文件可用。 –

回答

0

經過一段時間的尋找,我找到了適合我需求的解決方案(我也希望你們)。由於版本5,所有jtsgeolatte幾何類型都可以直接通過休眠進行管理,所以應該配置休眠以管理這些類型。

在我的情況我管理所有的配置彈簧@Configuration類:有,如圖中的「例如9」的here我決定使用MetadataBuilder方法如下:

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

在這樣我所有的jts幾何圖形(也有其他的geolatte幾何圖形org.hibernate.spatial.GeolatteGeometryType)正確映射爲我的數據庫模型中的聲明。

希望這可以幫到你,

Dario。

+0

我決定暫時堅持使用hibernate 4.3,但我還沒有測試過您的解決方案。我將在不久的將來遷移到5. *並驗證/接受答案。謝謝。 –

+0

使用5.2.3。默認情況下支持最終版本的hibernate jts幾何,不需要額外的配置。我使用的是JTS 1.13版本。 –