2016-03-09 45 views
1

我在用於數據庫持久性的Java應用程序中使用Hibernate 5.1.0.Final。對於我們來說,這將非常方便,因爲我們預計會碰到Oracle和Postgres實例,所以我們可以將此ORM作爲抽象層。 在former issue when querying geometries using Hibernate-spatial我發佈了一些我的配置。
現在的問題是當我們在Oracle中堅持一些幾何字段時。在我的POJO我有一個導入:使用Hibernate 5和Oracle將幾何存儲爲SDO_POINT_TYPE

import com.vividsolutions.jts.geom.Geometry;

所以,我在我的類中定義以下屬性:

@Column(name = "geom") 
protected Geometry geom; 

它得到堅持,我可以使用謂詞來查詢。但看在數據庫中我可以看到GEOM字段的內容是:

MDSYS.SDO_GEOMETRY(2001,4326,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1,1),MDSYS.SDO_ORDINATE_ARRAY(0.094,51.488))

而不是我想什麼,這是更快的查詢和推薦由Oracle:

MDSYS.SDO_GEOMETRY(2001,4326,MDSYS.SDO_POINT_TYPE(0.094,51.488,NULL),NULL,NULL)

我應該怎麼做才能將其存儲爲點(SDO_POINT_TYPE)而不是數組(SDO_ELEM_INFO_ARRAY)?

編輯:我試圖改變爲Point如下所示,但它並沒有什麼區別,據我所知。

import com.vividsolutions.jts.geom.Point; 
(...) 
@Column(name = "geom") 
protected Point geom; 

回答

1

在我看來,目前沒有辦法來強制Hibernate點存儲爲點,而不是座標的數組。我深入瞭解了這一點,並且主要針對我對源代碼進行了調整,但對於那些需要這樣做的人也是如此。

我創建了對原始項目的拉取請求。儘管它可能會或可能不會考慮主,任何人都可以潛在地產生的OracleJDBCTypeFactory.java自己定製的版本從這裏把它:

https://github.com/GeoLatte/geolatte-geom/pull/42

更新:這是合併到主。它應該準備好用於geolate-geom的下一個版本。根據@maesenka的評論:

您必須設置系統屬性GEOLATTE_USE_SDO_POINT_TYPE=true才能啓用此功能。

相關問題