【问题标题】:Force property order in Spring Data MongoDB mappingSpring Data MongoDB映射中的强制属性顺序
【发布时间】:2011-06-09 14:27:02
【问题描述】:

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

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

当它被持久化到 mongo 中时,县总是在纬度和经度之前。这是一个问题,因为我正在尝试在其上放置地理索引,并且前两个属性必须是纬度/经度。

我试过了:

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

当位置对象被序列化为 xml 到我的客户端而不是数据库时,这有效。似乎弹簧数据或某些 mongo 映射器总是按字母顺序做事。

有谁知道如何强制订单属性持久化到 mongo 中? 谢谢!

【问题讨论】:

    标签: java spring mongodb spring-data


    【解决方案1】:

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

    Location {
       @Field(order = 1)
       float lat;
    
       @Field(order = 2)
       float lon;
    
       @Field(order = 3)
       County county;
    }
    

    字段按以下顺序持久化:lat、lon、county。

    【讨论】:

    • 这是针对我提交的问题提交的修复程序,因此我会接受您的回答。感谢您更新它!实际上我最终做了一些不同的事情,我会添加。
    【解决方案2】:

    大家都知道,我一直在与 Spring 开发人员交谈,他们要求我针对该问题提交 JIRA,因为目前无法执行此操作。 JIRA 可以在这里找到: https://jira.springsource.org/browse/DATADOC-172

    【讨论】:

    • 应该用最新的夜间快照修复。
    【解决方案3】:

    不清楚您使用什么将 POJO 转换为 MongoDB。像 Morphia (http://code.google.com/p/morphia) 这样的映射器将使用您的类中声明的字段顺序。也可以通过各种方式控制这一点。

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

    【讨论】:

    • 是的,它正在使用 Spring Data(如标题中所述),并在那里尝试过,但还没有回应,所以想在 stackoverflow 上试试运气。谢谢
    • 我很感兴趣 Morphia 如何实现“在您的类中声明的字段顺序”,因为 Class.getFields() 的 JavaDoc 明确保证一定的顺序。因此,人们可能会在不同的虚拟机上获得不同的字段顺序,甚至不应该依赖于单个虚拟机的持久顺序。
    【解决方案4】:

    为了完整起见,我最终制作了一个包含纬度/经度的 Point 对象并为该对象编制了索引。这样,它是对象中唯一的东西,顺序无关紧要。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2021-04-02
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      • 2015-10-31
      相关资源
      最近更新 更多