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
相关产品推荐
相关产品推荐

