簡體   English   中英

在 Spring 數據 MongoDB 映射中強制屬性順序

[英]Force property order in Spring Data MongoDB mapping

我有一個位置 object,當它們持久保存到 mongodb 時,我需要強制屬性的順序,但我沒有太多運氣弄清楚如何去做。 位置 class 看起來像:

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

當它堅持到mongo時,縣總是在緯度和經度之前。 這是一個問題,因為我試圖在其上放置一個地理索引,並且前兩個屬性必須是緯度/經度。

我努力了:

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

當位置 object 被序列化為 xml 給我的客戶時,這有效,但不是數據庫。 似乎 spring 數據或某些 mongo 映射器總是按字母順序做事。

有誰知道如何強制訂單屬性持久化到 mongo 中? 謝謝!

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

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

   @Field(order = 2)
   float lon;

   @Field(order = 3)
   County county;
}

這些字段按以下順序保留:緯度、經度、縣。

大家都知道,我一直在與 Spring 開發人員交談,他們要求我針對該問題提交 JIRA,因為目前無法執行此操作。 JIRA 可以在這里找到: https://jira.springsource.org/browse/DATADOC-172

為了完整起見,我最終制作了一個包含緯度/經度的點 object,並索引了 object。 這樣,它是 object 中唯一的東西,順序無關緊要。

在相關的說明中,就在今天,我了解到如果您要進行空間查詢,您必須按以下順序存儲您的屬性:經度、緯度。 您可以在此處查看更多信息,但我今天用這個把頭撞到牆上有一段時間了,所以如果您要存儲地理查詢的點,請確保它們的順序正確。 這意味着您將經度放在 class 中。 我想您也可以使用 @Field 屬性對它們進行注釋。

目前尚不清楚您使用什么將 POJO 轉換為 MongoDB。 像 Morphia (http://code.google.com/p/morphia) 這樣的映射器將使用 class 中聲明的字段順序。 也有多種方式可以控制這一點。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM