繁体   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