2011-06-09 104 views
1

我有一個Location對象,當它們被保存到mongodb時,我需要強制這些屬性的順序,但是我沒有很好的計算出如何執行它。位置類看起來像這樣:在Spring Data MongoDB映射中強制屬性命令

Location { 
    float lat; 
    float lon; 
    County county; 
} 

當它被持續到mongo,縣總是在經度和緯度之前。這是一個問題,因爲我試圖在上面放置一個geoindex,前兩個屬性必須是lat/long。

我曾嘗試:

@XmlRootElement(name="location") 
@XmlType(propOrder={"latitude", "longitude", "county"}) 
Location { 
    float lat; 
    float lon; 
    County county; 
} 

,當定位對象序列化到XML我的客戶,而不是數據庫的工作。看來春天的數據或者一些mongo mapper總是按照字母順序來做事情。

有誰知道如何強制將訂單屬性保存到mongo中? 謝謝!

回答

5

您可以使用@Field註解的order屬性強制字段順序。所以,如果你有:

Location { 
    @Field(order = 1) 
    float lat; 

    @Field(order = 2) 
    float lon; 

    @Field(order = 3) 
    County county; 
} 

該字段是按照以下順序持續:lat,lon,county。

+0

這是針對我提交的問題所做的修復,因此我會接受您的答案。感謝您的更新!我實際上最終做了一些不同的事情,我會補充。 – 2013-01-23 21:25:13

0

目前還不清楚你用什麼來將POJO轉換爲MongoDB。像Morphia(http://code.google.com/p/morphia)這樣的映射器將使用您的類中聲明的字段順序。有多種選項可以用各種方式來控制它。

如果這是一個Spring Data(框架)問題,我會建議前往他們的論壇尋求支持。

+0

是的,它使用的是Spring Data(如標題所述),並在那裏嘗試過,但沒有任何反應,所以想要在stackoverflow上嘗試我的運氣。謝謝 – 2011-06-09 15:19:08

+0

我會對Morphia如何實現「在您的類中聲明的字段順序」感興趣,因爲JavaDoc for Class.getFields()明確地*不保證特定的順序。所以在不同的虛擬機上可能會得到不同的字段順序,甚至不應該依賴於單個虛擬機持久化的順序。 – 2011-07-12 07:05:07

1

大家都知道,我一直在和Spring開發人員交談,他們要求我提交JIRA來解決這個問題,因爲現在沒有辦法做到這一點。 JIRA可以在這裏找到: https://jira.springsource.org/browse/DATADOC-172

+2

應該使用最新的夜間快照修復。 – 2011-07-07 13:59:57

0

爲了完整起見,我最終創建了一個Point對象,該對象包含經緯度和索引的對象。這樣,它就是對象中唯一的東西,順序並不重要。

在相關說明上,就在今天,我瞭解到如果您要進行空間查詢,則必須按以下順序存儲您的屬性:經度,緯度。你可以看到here獲取更多信息,但是今天我用頭撞了牆頭,所以如果你正在爲地理查詢存儲點數,請確保你按照正確的順序排列它們。所有這一切意味着你在課堂上首先要經度。我想你也可以用@Field屬性對它們進行註釋。