问题:
@DbRef 没有在 spring data mongodb 中自动保存子对象
答案:
在 Spring Data MongoDB 中,当使用 @DbRef
注解时,如果目标集合中存在具有相同键的文档,则不会自动保存子对象。这是因为 MongoDB 数据库中的文档没有像关系型数据库中那样的外键约束。
为了解决这个问题,可以使用 @Reference
注解来手动保存子对象。例如:
@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
注解时,应该确保目标集合中不存在具有相同键的文档。
领取专属 10元无门槛券
手把手带您无忧上云