2011-06-09 69 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属性对它们进行注释。