스프링 데이터를 스프링 MVC와 함께 사용할 때 MongoDB 문서를 업데이트하기위한 재사용 가능한 패턴을 찾는다.스프링 데이터 MongoDB와 스프링 MVC로 객체/문서를 업데이트하기위한 패턴
- 문서가 repository.save를 사용 몽고에서 생성된다()이 문서
- 부분이어서 스프링 MVC 편집 가능한 형태로 표시된다 :
유스 케이스
일반적으로 요약 될 수있다. - 사용자는 문서의 업데이트 된 부분을 제출하여 저장합니다.
3 단계에서 repository.save() 메서드를 사용하면 양식에 바인딩되지 않은 문서의 모든 데이터가 손실됩니다. 전체 문서에 책임이있는 폼을 만들기가 어렵 기 때문에 MongoTemplate의 findAndModify() 메소드가 도움이 될 것 같습니다.
findAndModify() 메소드를 사용하기 위해 Form 객체의 속성을 Map으로 취하고 일부 필드 (예 : 클래스 및 ID)를 제거하는 toMap() 메소드를 지원하는 Form 객체를 만들었습니다. 이것은 나에게 Form 객체로부터 관심이있는 필드만을 포함하는 Map을 얻습니다. 객체 ID와이 맵을 사용자 지정된 리포지토리의 update() 메서드에 전달하여 findAndModify() 메서드에 전달할 수있는 Query 및 Update 객체를 작성합니다.
이 방법을 사용하면 필드를 내 개체에 쉽게 추가 할 수 있으며 폼 게시에서 업데이트하지 않으려는 필드가있는 경우 인스턴스에 대해서만 걱정할 수 있습니다. 양식에 의해 조작되지 않은 문서 필드는 유지되어야합니다. Repository와 MongoTemplate을 모두 사용하는 것은 여전히 약간 복잡한 것처럼 보입니다. 그래서 이것을 처리하는 더 좋은 예제가 있는지 궁금합니다. Mongo와 Spring MVC (최소한)와 작업 할 때 이것이 일관된 패턴이어야하는 것처럼 보입니다.
GitHub에서이 모델을 얻는 방법을 보여주는 샘플 프로젝트를 만들었습니다. Spock 테스트는 save()를 사용하여 문서를 "업데이트"하면 필드가 예상대로 날아가 버리고 내 update() 메소드가 어떻게 날아가 버리는지를 보여줍니다.
https://github.com/watchwithmike/diner-data
스프링 MVC와 Spring 데이터를 사용하여 문서에 부분적인 업데이트를 처리 할 때 다른 사람이 뭐하는거야?
아이디어는 사용자가 제공하는 모든 것을 가져 가지 않고 데이터베이스에 저장하는 것입니다. 사용자가 제공 할 수있는 유일한 것은 양식의 데이터 필드입니다. 내 간단한 예제 들어, 내 양식 내 모델 개체를 확장 할 필요는 없지만. 내 toMap() 메소드에서 "user supplied"필드를 제외 할 수도 있습니다.내가 만든 사용자 정의 저장소에서 만든 update() 메서드는 MongoTemplate을 사용하여 쿼리 및 업데이트를 수행하지만 JPA/Hibernate에서 왔지만 예상보다 약간 더 많은 코드처럼 보입니다. 더 좋은 방법이 있는지 또는 이것이 단지 몽고와 더 큰 융통성을 갖는 부작용. – watchwithmike
@watchwithmike 혹시이 문제를 해결할 수 있었습니까? –
@VishwasShashidhar MongoDB를 사용하도록 구성 할 수있는 [JHipster] (https://jhipster.github.io/) 응용 프로그램에서 찾을 수있는 패턴을 사용하여 끝 냈습니다. [엔티티 페이지 만들기] [https://jhipster.github.io/creating_an_entity.html]는 프로젝트가 엔티티 측에서 수행하는 작업에 대한 개요를 제공하므로 대신 MongoDB를 사용하도록 구성해야합니다 JPA의 JHipster를 사용하여 프로젝트 전체를 시작하지 않고 참조로 사용했습니다. 희망이 도움이됩니다. – watchwithmike