2017-04-25 126 views
0

我最近问这个问题:Spring Mongodb - Insert Nested document?Spring Hibernate - 它支持嵌套对象吗?

,并发现弹簧数据的MongoDB不支持这样的行为 - 所以现在我需要一个工作方案。

现在 - 以避免你看看另一页上的代码,我要在这里与其他问题贴......这里是我的两个的POJO:

@Document 
public class PersonWrapper { 

    @Id 
    private ObjectId _Id; 

    @DBRef 
    private Person leader; 

    @DBRef 
    List<Person> delegates; 

    // Getters and setters removed for brevity. 
} 

public class Person 
{ 
    @Id 
    private ObjectId _Id; 

    private String name; 

    // Getters and setters removed for brevity. 
} 

现在,我想要什么能够在这里做的 - 在我的POST请求发送了一个JSON对象,如下所示:

{ 
    "personWrapper": 
    { 
     "_Id":"<ID HERE (MIGHT WANT SQL TO GENERATE THIS DURING CREATE>", 
     "leader":{ 
      "_Id":"<ID HERE (MIGHT WANT SQL TO GENERATE THIS DURING CREATE>", 
      "name":"Leader McLeaderFace" 
     }, 
     delegates:[{...},{...},{...}] 
    } 
} 

在这一点 - 我想这样做的SQL一边以创建单个记录所需 - 然后插入PersonWrapper记录,以最有效的方式将所有正确的外键记录到期望的记录中尽可能的方式。老实说,如果你们其中一个人认为我对Spring-Data-MongoDB的方法有误,我仍然对这个答案感兴趣 - 因为它会为我省去迁移数据库设置的麻烦。所以我仍然会在这里标记spring-data-mongodb社区。

回答

0

如果我理解得很好,你想级联保存你的对象?

例如:您将一个PersonWrapper与某个Person保存在delegates属性中,并且spring数据将PersonneWrapper保存到一个集合中,并将Person列表另存为另一个集合。

如果您使用JPA注释@OneToMany注释POJO并设置此注释的级联属性,那么使用Spring DATA JPA可以做到这一点。 See this post

但是,级联功能不适用于Spring DATA mongoDB。 See documentation。首先你必须保存Person的列表,然后保存PersonWrapper。

+0

好吧,我会准备保存人员名单,然后保存包装,但什么是最有效的方法呢? – IWishIWasABarista