Spring Data MongoDB映射中的强制属性顺序

时间:2011-06-09 14:27:02

标签: java spring mongodb spring-data

我有一个Location对象,当它们被持久化到mongodb时我需要强制它们的顺序,但是我没有太多的运气弄清楚如何去做。 Location类看起来像:

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;
}

当location对象被序列化为xml到我的客户端,而不是DB。似乎spring数据或某些mongo mapper总是按字母顺序执行操作。

有谁知道如何强制将订单属性保存到mongo中? 谢谢!

4 个答案:

答案 0 :(得分:7)

您可以使用@Field注释的order属性强制字段顺序。所以,如果你有:

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

   @Field(order = 2)
   float lon;

   @Field(order = 3)
   County county;
}

字段按以下顺序保留:lat,lon,county。

答案 1 :(得分:1)

大家都知道,我一直在与Spring开发人员交谈,他们让我提交JIRA来解决这个问题,因为现在无法做到这一点。 JIRA可以在这里找到: https://jira.springsource.org/browse/DATADOC-172

答案 2 :(得分:0)

目前还不清楚您从POJO转换为MongoDB的用途。 Morphia(http://code.google.com/p/morphia)等映射器将使用您班级中声明的字段顺序。有各种方法可以控制这种情况。

如果这是一个Spring Data(框架)问题,我建议前往他们的论坛寻求支持。

答案 3 :(得分:0)

为了完整起见,我最终创建了一个Point对象,其中包含lat / long和索引的对象。这样,它是对象中唯一的东西,顺序无关紧要。

在相关的说明中,就在今天我了解到您是否想要进行空间查询,您必须按以下顺序存储您的属性:经度,纬度。你可以看到here了解更多信息,但是今天我用头撞到了墙上一段时间,所以如果你要存储地理查询点,请确保按正确的顺序排列。所有这些意味着你将经度放在班上。我想你也可以使用@Field属性来注释它们。