首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

@DbRef没有在spring数据mongodb中自动保存子对象

问题:

@DbRef 没有在 spring data mongodb 中自动保存子对象

答案:

在 Spring Data MongoDB 中,当使用 @DbRef 注解时,如果目标集合中存在具有相同键的文档,则不会自动保存子对象。这是因为 MongoDB 数据库中的文档没有像关系型数据库中那样的外键约束。

为了解决这个问题,可以使用 @Reference 注解来手动保存子对象。例如:

代码语言:java
复制
@Document(collection = "parent")
public class Parent {
    @Id
    private String id;
    private String name;
    private Child child;

    // 构造方法、getter 和 setter 方法
}

@Document(collection = "child")
public class Child {
    @Id
    private String id;
    private String name;

    // 构造方法、getter 和 setter 方法
}

@Repository
public interface ParentRepository extends MongoRepository<Parent, String> {
    List<Parent> findByChildId(String childId);

    @Reference(to = "child")
    Child saveChild(Child child);
}

在上面的示例中,我们使用 @Reference 注解来手动保存子对象 Child。在 findByChildId 方法中,我们使用 childId 来查询 Child,而在 saveChild 方法中,我们使用 @Reference 注解来手动保存 Child

需要注意的是,如果目标集合中存在具有相同键的文档,则不会自动保存子对象。因此,在使用 @Reference 注解时,应该确保目标集合中不存在具有相同键的文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Data MongoDB自定义级联

原文链接:http://www.baeldung.com/cascading-with-dbref-and-lifecycle-events-in-spring-data-mongodb 作者: baeldung...概述 本教程将继续探索Spring Data MongoDB的一些核心特性——@DBRef 注解和life-cycle事件。 2....@DBRef 映射框架不支持在其他document存储parent-child关系和嵌入式document。我们可以做的是——我们可以分别存储它们,并使用DBRef来引用这些document。...当对象MongoDB加载时,这些引用将会被立即解析,我们将返回一个映射的对象,它看起来与存储我们的master document中一样。...总结 本文中,我们展示了Spring Data MongoDB的一些很酷的特性——@DBRef注解、life cycle事件以及我们如何智能地处理级联。

55830

SpringBootMongoDB注解概念及使用

spring-data-mongodb主要有以下注解 @Id 主键,不可重复,自带索引,可以定义的列名上标注,需要自己生成并维护不重复的约束。...给映射存储到 mongodb 的字段取别名 java bean 字段名为 firstName,存储到 mongo key 为 fName @Field("fName") private...如果在Article里删除关联的list,set为null并保存,系统只会删掉Article里关联的list,而Picture对象本身的数据是不会被删除的。...从上面看来,貌似DBRef比较鸡肋,而且甚至有时还会带着误导的性质,譬如Article关联了两个空的Picture时Article还能看到2个对象的引用,然后2个对象并不存在,是查询不出来的。...实际使用,感觉貌似作用是不同的表做划分吧,有点模拟mysql外键的意思。免得数据都落到一个大表的,不便于做关联的表的查询。

6.4K30
  • Spring认证中国教育管理中心-Spring Data MongoDB教程十四

    对象MongoDB 加载时,这些引用会被急切地解析,以便您返回一个映射对象,该对象看起来与嵌入顶级文档的存储相同。...当对象存储 MongoDB 时,有一个 DBRef 列表而不是Account对象本身。加载DBRefs 的集合时,建议将集合类型中保存的引用限制为特定的 MongoDB 集合。...这允许批量加载所有引用,而指向不同 MongoDB 集合的引用需要一一解析。 映射框架不处理级联保存。如果更改Account对象引用的Person对象,则必须Account单独保存对象。...调用save上的Person对象不会自动保存Account在对象accounts属性。 DBRefs 也可以懒惰地解决。...DBRef解析为具有固定结构的文档,如MongoDB 参考文档中所述。 文档引用,不遵循特定格式。它们实际上可以是任何东西,单个值,整个文档,基本上可以存储 MongoDB 的所有内容。

    5.8K10

    Spring认证中国教育管理中心-Spring Data MongoDB教程十三

    所有嵌套对象都作为嵌套对象存储文档,而不是作为 DBRef 存储。 转换器使用任何注册的 Spring 转换器来覆盖对象属性到文档字段和值的默认映射。 对象的字段用于文档的字段之间进行转换。...18.5.基于元数据的映射 要充分利用 Spring Data MongoDB 支持对象映射功能,您应该使用注释对映射对象进行@Document注释。...尽管映射框架没有必要具有此注释(您的 POJO 已正确映射,即使没有任何注释),但它允许类路径扫描器查找和预处理您的域对象以提取必要的元数据。...@Document: 应用于类级别,表示该类是映射到数据库的候选。您可以指定将存储数据的集合的名称。 @DBRef:应用于该字段以指示将使用 com.mongodb.DBRef 存储它。...这使您可以使用 Spring 表达式语言语句来转换在数据检索到的键值,然后再使用它来构造域对象

    2.8K20

    程序员的50大MongoDB面试问题及答案

    + Spring数据+ MongoDB进行身份验证 48.Java ORM for MongoDB的开销是多少 49.使用Jackson PTH和Spring Data MongoDB DBRef的Java...2.MongoDB的优势有哪些 面向文档的存储:以 JSON 格式的文档保存数据。 任何属性都可以建立索引。 复制以及高可扩展性。 自动分片。 丰富的查询功能。 快速的即时更新。...19.MongoDb什么是索引 索引用于高效的执行查询,没有索引的MongoDB将扫描整个集合的所有文档,这种扫描效率很低,需要处理大量的数据....MongoDB存储BSON对象丛集(collection)数据库名字和丛集名字以句点连结起来叫做名字空间(namespace)。 26.如果用户移除对象的属性,该属性是否从存储层删除?...GridFS是一种将大型文件存储MongoDB的文件规范。使用GridFS可以将大文件分隔成多个小文档存放,这样我们能够有效的保存大文档,而且解决了BSON对象有限制的问题。

    35420

    spring data mongodb dbref 关联查询

    今天我们学习下DBRef的使用,用过mongodb的都知道mongodb不能做关联查询,关系型数据是可以的,当然我们不要用关系型数据库的思想来用nosql。 但是实际应用也是会有类似的需求的。...mongodb可以使用DBRef来关联 定义要用到的实体类 @Document public class Class { @Id private String id; //班级名称...private Class classObj; } 保存数据的时候先保存班级数据,班级有了学生对象的班级才能引用到,因为引用是通过_id来的。...这边先保存学生信息,学生引用了班级,班级还没保存保存班级信息的话,班级引用了学生,学生此时还没保存 如果引用没保存的信息就会报错 Exception in thread "main" org.springframework.data.mapping.model.MappingException...,马上把班级集合的学生List对象改掉,这样班级也就存在了对这个学生的引用信息, 这样就会比较麻烦。

    4.4K70

    Spring Boot 中使用 MongoDB 增删改查

    4.全索引支持,扩展到内部对象和内嵌数组 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合的每个文件并选取那些符合查询条件的记录。...索引是特殊的数据结构,索引存储一个易于遍历读取的数据集合,索引是对数据库表中一列或多列的值进行排序的一种结构。...@Document(collection="mongodb") mongodb对应表 @DBRef - 声明类似于关系数据库的关联关系。...ps:暂不支持级联的保存功能,当你本实例修改了DERef对象里面的值时,单独保存本实例并不能保存DERef引用的对象,它要另外保存,如下面例子的Person和Account。...@Transient - 映射忽略的字段,该字段不会保存mongodb。 @PersistenceConstructor - 声明构造函数,作用是把从数据库取出的数据实例化为对象

    3.2K70

    Spring整合MongoDb

    MongoDb应运而生,MongoDb是典型的文档性的数据库,对于保存多层级的数据比较方便,同时MongoDb更强调用户的访问速度,采用的是若一致性,对于数据请求提供一个“大约”的数字,以求更快处理数据...MongoDb内置GridFs,支持大容量的存储,同时也包含了Sharding,提供了基于Range的AUTO Sharding机制。...Spring Data MongoDb Spring Data其实是一个高级别的Spring Source项目,而Spring Data MongoDB仅仅是其中的一个子项目。...@Indexed - 用于字段,表示该字段需要如何创建索引 @DBRef - 用于字段,以表示它将使用com.mongodb.DBRef进行存储。...3.创建Spring-mongo.xml的配置文件 或者直接再spring配置文件整合即可 <?xml version="1.0" encoding="UTF-8"?

    2.1K20

    明了 | MongoDB 外键的基本使用

    小小继续进行学习,这次学习的内容是MongoDB外键的基本使用。 表示表关系的方法 传统的关系型数据库当中,表示表关系,数据是通过索引来完善。...而在MongoDB,表示表关系,使用的是嵌套,即,一个文档嵌套一个文档的方法,作为MongoDB的两个文档的关联,以及使用,reference link作为文档和文档之间的关联。...此时对于DBRef具有以下字段。 $ref 该$ref字段包含引用文档所在的集合的名称。 $id 该$id字段包含_id引用文档字段的值。...只有一些驱动程序支持$db引用,该字段说明可以跨集合关联 这里对集合操作关联如下 // 保存集合的数据 > var a={value:"1"}   > var b={value:"2"}   >...:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:3}                         // 保存集合 >

    1.8K20

    浅尝辄止MongoDB:操作(3)

    注意列表中最多可以包含1000个操作,超过此限制时,MongoDB自动分割列表,把它们放在几个包含1000个操作的组。...引用数据MongoDB提供了两种方式实现文件间的引用:手动引用或使用DBRef标准。 (1)手动引用 手动引用通过一个文档中使用另一个文档的_id实现。...使用DBRef可以将数据库引用存储为标准的嵌入对象(JSON/BSON)。使用一种标准方式代表引用,意味着驱动和数据框架可以添加辅助方法,以标准的方法操作引用。...>代表集合名称;代表被引用对象的_id字段;通过使用可选的$db可以引用其它数据的文档。...MongoDB 3.0以后版本,ensureIndex()是createIndex()的别名。

    99920

    MongoDB【快速入门】

    name: "我没有三颗心脏", age: 22, } 文档型的数据存储方式有几个重要好处: 文档的数据类型可以对应到语言的数据类型,如数组类型(Array)和对象类型(Object); 文档可以嵌套...collections 列出数据可用集合 use 用于切换数据mongoDB 预设有两个数据库,admin 和 local,admin 用来存放系统数据,local 用来存放该实例数据副本集中...为了没有连接的MongoDB中生存下去,没有其他帮助的情况下,我们必须在自己的应用程序实现连接。 基本上我们需要用第二次查询去找到相关的数据。...4.1.1 数组和嵌入文档(Embedded Documents) MongoDB 没有连接并不意味着它没有其他的优势。还记得我们曾说过 MongoDB 支持数组并把它当成文档的一级对象吗?...例如,文档 1 的 DBRef 可能指向 managers 的文档,而文档 2 DBRef 可能指向 employees 的文档。

    88010

    MongoDB【快速入门】

    name: "我没有三颗心脏", age: 22, } 文档型的数据存储方式有几个重要好处: 文档的数据类型可以对应到语言的数据类型,如数组类型(Array)和对象类型(Object)...返回 1 表示插入成功,mongoDB 自动创建 newCollection 集合和数据库 newDatabase。...为了没有连接的MongoDB中生存下去,没有其他帮助的情况下,我们必须在自己的应用程序实现连接。 基本上我们需要用第二次查询去找到相关的数据。...4.1.1 数组和嵌入文档(Embedded Documents) MongoDB 没有连接并不意味着它没有其他的优势。还记得我们曾说过 MongoDB 支持数组并把它当成文档的一级对象吗?...例如,文档 1 的 DBRef 可能指向 managers 的文档,而文档 2 DBRef 可能指向 employees 的文档。

    87940

    一个小型、快速、轻量级的 .NET NoSQL 嵌入式数据

    LiteDB 的灵感来自 MongoDB 数据库,所以它的 API 和 MongoDB 的 .NET API 非常相似。...可使用特性或 fluent 映射 API 将你的 POCO 类映射为 BsonDocument 可存储文件与流数据 (类似 MongoDB 的 GridFS) 单数据文件存储 (类似 SQLite)...您可以使用非常相似的 SQL 关系语言插入、更新、删除或查询数据库 LINQ 表达式(lambda 函数)可用于 C# 代码创建流畅的 API 查询 新的 LiteDB.Studio 管理工具支持所有...MyData.db"); 4 使用方法 // 获取 Customers 集合 var col = db.GetCollection("customers"); // 创建一个对象...col.Delete(user.Id); 使用 fluent 映射器和跨文档引用处理更复杂的数据模型 // DbRef 交叉引用 public class Order { public ObjectId

    2.2K20

    MongoDBSpring配置使用

    Spring-data对MongoDB进行了很好的支持,接下来就讲解一下关于SpringMongoDB的配置和一些正常的使用 我下面的工程使用的是Spring的Java配置的方式和Maven构建 ①MongoDB...; @Configuration // 启用MongoDB的Repository功能,会对其Repositories自动扫描 @EnableMongoRepositories(basePackages...文档上的领域对象 @ID 标示某个为ID域 @DbRef 标示某个域要引用其他的文档,这个文档有可能位于另外一个数据 @Field 为文档域指定自定义的元数据 @Version 标示某个属性用作版本域...MongoOperations是MongoTemplate所实现的接口,MongoOperations存在很多文档操作方法 MongoOperations其实已经能满足很多需求了 如果还没有满足你的需求...Iterable的所有文档 save() 为给定的对象保存一条文档 上面的我们定义的四个方法都是我们自定义的方法,其方法名存在很多意义,不能随便定义 List findByCustomer

    1.8K20

    SpringBoot详细研究-02数据访问

    JPA,为不同数据库提供了统一的接口,我们只需继承其默认的JpaRepository(仓库模式),就自动的拥有很多常见的数据访问方法。...SpringData是解决数据访问问题的一揽解决方案,包含对JPA, MongoDB, Redis, Hadoop, Data Rest, Elasticsearch等一系列组件的支持,其通过Spring... 9 Eclipse,支持JPA实体对象的代码生成,需要在项目Facet上添加jpa,之后使用jpatool生成代码。...Spring对mongo的支持通过Spring Data MongoDB来实现,提供的功能为:@Document映射领域对象MongoDB的一个文档;@Id映射当前属性是ID;@DbRef当前属性将参考其他文档... 10 数据缓存Cache:Config类,注册RedisCacheManager,添加上@EnableCache注解。

    2.8K90

    Spring认证中国教育管理中心-Spring Data MongoDB教程八

    onBeforeSave:调用MongoTemplate insert,insertList以及save操作之前插入或保存Document在数据。...onAfterSave:调用MongoTemplate insert,insertList以及save操作后插入或保存Document在数据。...Spring 的所有数据访问异常都继承自根DataAccessException类,因此您可以确保单个 try-catch 块捕获所有与数据库相关的异常。... T executeInSession (DbCallback action):DbCallback数据库的同一连接内运行给定的,以确保写入繁重的环境的一致性,您可以该环境读取您写入的数据...11.20.带有可尾游标的无限流 默认情况下,当客户端耗尽游标提供的所有结果时,MongoDB自动关闭游标。耗尽时关闭游标会将流变成有限流。

    2K30
    领券