2009-10-20 97 views
2

我不確定這是否可能在Hibernate中,但如果它是真的很好:)我實際上沒有超過這個概念階段,但我會盡可能解釋我可以。在休眠映射計算字段

我想利用Oracle Spatial功能進行基於鄰近度的搜索。想象一下,我有一個存儲緯度/經度值的位置實體。然後,想象一下,我想查詢用戶指定緯度/經度位置5公里內的所有位置。在結果中,我希望看到所有匹配的位置,但除了位置實體上的標準映射字段之外,我還希望顯示每個位置相對於用戶指定位置的距離。

Oracle Spatial會讓我在SQL中做一個計算的字段,但我不明白Hibernate如何支持從數據庫返回的計算字段。由於計算的字段不是表格中的列,因此我無法執行標準映射。

是否有一些特殊功能允許我爲POJO創建包裝並將Hibernate映射到它們以便可以返回其他計算屬性?

回答

1

你看過Hibernate Spatial及其Oracle10g/11g Provider

Hibernate Spatial是一個通用的 擴展到Hibernate處理 地理數據。 Hibernate Spatial是 開源和許可的,如 Hibernate,根據LGPL許可證。

Hibernate Spatial允許您使用標準化的 方式處理地理數據 。它抽象出您的數據庫支持 地理數據的具體方式,並提供 標準化的跨數據庫接口 地理數據存儲和查詢 功能。

Hibernate Spatial支持OGC Simple Feature 規範的大部分 函數。支持的數據庫 是:Oracle 10g/11g, Postgresql/Postgis和MySQL。

+0

這似乎很有趣,感謝你指着我這個方向發展。但是,我仍然不清楚如何實際映射計算字段。想象一下,我的Location類定義了一個「Point」。我想返回距離用戶指定點5公里內的位置列表。我希望每個匹配位置都包含與用戶指定點的確切接近度(這必須在數據庫中作爲幾何處理的一部分進行計算)。我的基本位置POJO顯然沒有這個計算列。如果它在查詢中返回,我該如何映射它? – DrewEaster 2009-10-21 09:27:05

2

我發現,使用JPA註解,我可以簡單地創建映射對象上的屬性具有相同的名稱作爲您的SQL計算領域,(例如,「距離」),並標註它:

@Column(insertable=false, updatable=false) 
private Double distance; 

而這應該映射屬性,而不是在您嘗試從數據庫中保存時拋出錯誤。

請注意正確的註釋是可更新的(不可更新,因爲它最初發布)