【问题标题】:Spring mongotemplate query result with subDocuments带有子文档的 Spring mongotemplate 查询结果
【发布时间】:2016-10-31 00:46:55
【问题描述】:

productChanges 集合中的文档如下所示。

{
    "_id" : NumberLong(9780876590034),
    "isbn" : NumberLong(9780876590034),
    "updDtime" : ISODate("2016-06-08T14:02:29.044Z"),
    "Audit" : {
        "LastProcCntrlNo" : 100192211,
        "UpdDtime" : ISODate("2016-06-08T14:02:29.044Z"),
        "AddDtime" : ISODate("2016-06-08T14:02:29.044Z")
    } 
}

我有我的ProductChanges.java 课程

public class ProductChanges {
     Long isbn;
     Date updDtime;
     Audit audit;

     // getters & setters
}

我使用mongoTemplate 查询数据库,但无法填充Audit 对象。

// query the DB
List<ProductChanges> productChanges = mongoTemplate.find(query, ProductChanges.class, "productChanges");

这应该很简单。我需要注释我的Audit 对象吗?我错过了一些琐碎的事情吗?

Spring Data MongoDB 文档没有帮助找到这个问题的答案。

【问题讨论】:

  • “我无法填充审核对象”:描述正在发生的事情。任何错误信息?列表不应该是空的吗?
  • @antoine-sac 没有错误信息。 productChanges 填充了条目,但 audit 始终为空。

标签: java spring mongodb spring-data spring-data-mongodb


【解决方案1】:

基于Spring Data MongoDB documentation

短 Java 类名通过以下方式映射到集合名。 com.bigbank.SavingsAccount 类映射到 savingsAccount 集合名称。

对象的字段用于与对象中的字段相互转换 文档。不使用公共 JavaBean 属性。

由于您的子文档字段名为Audit,Java 字段名称为audit,Spring Data 无法按您的预期填充audit 字段。

为了解决这个问题,您应该将您的字段重命名为Audit

public class ProductChanges {
     Long isbn;
     Date updDtime;
     Audit Audit; // renamed to Audit from audit

     // getters & setters    
}

或者使用@Field注解:

public class ProductChanges {
     Long isbn;
     Date updDtime;
     @Field("Audit") Audit audit;

     // getters & setters
}

您可以阅读更多关于映射注解的信息here。还有一点建议,尽量使用一致的命名约定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2021-05-07
    • 2016-11-12
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2018-10-14
    相关资源
    最近更新 更多