2017-04-25 157 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