You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB仓库:如何标注非Document类型的子类?

解决MongoDB嵌套类(非Document类型)的标注问题

嗨,我来帮你搞定这个MongoStudium类的标注问题~

首先明确:MongoStudium作为MongoStudent的嵌套子文档,不需要添加@Document注解,因为它不是MongoDB中独立的集合,只是嵌入在MongoStudent文档里的结构。下面是具体的实现方式:

正确的MongoStudium类标注示例

import org.springframework.data.mongodb.core.mapping.Field;

public class MongoStudium {
    // 用@Field指定MongoDB中存储的字段名(可选,不写的话会用属性名作为字段名)
    @Field("course_name")
    private String courseName;
    
    @Field("credit")
    private Integer credit;

    // 提供构造方法(Spring Data需要用来实例化对象,可根据需求选择带参或无参)
    public MongoStudium() {}

    public MongoStudium(String courseName, Integer credit) {
        this.courseName = courseName;
        this.credit = credit;
    }

    // 省略getter、setter方法
}

关键说明

  • 嵌入式子文档的核心:MongoDB里的嵌入式文档是直接嵌套在父文档中的数据结构,不需要单独的集合,所以这类嵌套类不需要@Document注解,Spring Data MongoDB会自动识别并映射。
  • 字段名控制:和父类MongoStudent一样,你可以在MongoStudium的属性上使用@Field注解来指定MongoDB中实际存储的字段名;如果不使用@Field,默认会用Java属性名作为MongoDB的字段名。
  • 父类的映射:你在MongoStudent中定义的@Field("studium") private List<MongoStudium> studium;已经是正确的写法,Spring Data会自动把这个List映射为MongoDB文档中的数组类型,每个数组元素就是一个MongoStudium对应的嵌入式文档。

额外注意

确保MongoStudium提供了合适的构造方法(无参构造或者带参数的构造方法),这样Spring Data MongoDB才能在从数据库读取数据时正确实例化对象。如果你的MongoStudium有复杂的嵌套结构,同样遵循这个规则——不需要@Document,直接用@Field标注属性即可。

内容的提问来源于stack exchange,提问作者caroline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:39:23