2017-04-25 4 views
0

최근에 나는이 질문을 던졌습니다 : Spring Mongodb - Insert Nested document?Spring Hibernate - 중첩 된 객체를 지원합니까?

그리고 Spring-Data-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 객체를 보낼 수 있습니다 : - 나는 개인 기록을 필요로 만들려면이의 SQL 측 싶습니다 -

이 시점에서
{ 
    "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:[{...},{...},{...}] 
    } 
} 

삽입 다음과 PersonWrapper 레코드는 원하는 외래 키를 모두 사용하여 가장 효율이 높습니다. 가능한 방법.

솔직하게 말해서 스프링 데이터 - MongoDB 접근법에 대해 내가 틀렸다면, 나는 대답에 관심이있을 것이다. 데이터베이스 설정을 마이그레이션하는 번거 로움을 덜어주기 때문이다. 그래서 나는 여기에도 봄 데이터 몽고 지역 공동체에 태그를 붙일 것이다.

답변

0

개체의 저장을 캐스케이드하고 싶다면 잘 알고있는 것이 맞습니까?

예 : 일부 Person과 함께 PersonWrapper를 delegates 속성에 저장하면 스프링 데이터가 PersonneWrapper를 컬렉션에 저장하고 Person 목록을 다른 Collection에 저장합니다.

JPA 주석 @OneToMany 및이 주석의 설정 캐스케이드 속성으로 POJO에 주석을 추가하면 Spring DATA JPA로이를 수행 할 수 있습니다. See this post

그러나 캐스케이드 기능은 Spring DATA mongoDB에서 사용할 수 없습니다. See documentation. 먼저 Person 목록을 저장 한 다음 PersonWrapper를 저장해야합니다.

+0

좋아, 나는 사람의 목록을 저장하고 래퍼를 저장할 준비가되어 있지만, 가장 효율적인 방법은 무엇입니까? – IWishIWasABarista