2016-12-19 3 views
0

개체 목록을 반복하고 각 루프 후에 한 개체를 저장합니다. 내가 찾은 것은 MongoRepository 인터페이스를 사용할 때 마지막 객체 만 항상 저장된다는 것입니다. 이 경우 저장소 인터페이스는 for 루프에있을 때 마지막 개체 인스턴스 만 저장하고 대량 삽입은 저장 전에 개체를 변경합니다.

for(int i=0;i<=objectList.size();i++){ 
    repositoryInterface.save(objectList.get(i)); 
} 

예를

에 대한

는, 마지막 개체를 통해 Objectlist 약 3 개체가있을 때 저장됩니다.

다시 repositoryInterface 저장하는 데 사용되는 경우 모든 objectList 쿼리, 이 repositoryInterface.save(objectList)은 통해 Objectlist의 마지막 개체에 마지막 변경 통해 Objectlist에서 세 개체에 대한 유지됩니다,라고 일인치

public class Book { 
    private String bookName; 
    private int bookNumber; 
    //then getters and setters 
} 


List<Book> books = new ArrayList<>(); 
Book book0 = new Book(); 
book0.setBookName("Book0"); 
book0.setBookNumber(0); 

books.add(book0); 

Book book1 = new Book(); 
book1.setBookName("Book1"); 
book1.setBookNumber(1); 

books.add(book1); 

for(int i=0;i< books.size();i++){ 
    switch(i){ 
     case 0 : 
      books.get(0).setBookNumber(00); 
      break; 
     case 1 : 
      books.get(1).setBookNumber(11); 
      break; 
     default: 
      System.out.println("nothing per this example"); 
    } 
} 

repositoryInterface.save(books); 

이제 몽고의 데이터베이스를 조사한 결과에 의하면, 무엇을 삽입하는

{bookName:"Book0",bookNumber:11},{bookName:"Book1",bookNumber:11} 

하나가 아닌 코드와 몇 가지 기본적인 문제를 해결하는 경우

{bookName:"Book0",bookNumber:00},{bookName:"Book1",bookNumber:11} 
+0

'도서'수업을 볼 수 있습니까? –

+0

@ JensSchauder, 업데이트 해주세요. – Rbk

+0

예제 코드에서 "Book2"라는 이름의 책을 만드십니까? –

답변

0

입니다 예를 들어 , 그것은 잘 작동합니다 . 여기에 내가 문제를 재현하려 코드가 있지만 (패키지 및 가져 오기 문은 제외) 문제없이 실행되는 :

책 클래스 :

public class Book { 
    private String bookName; 
    private int bookNumber; 

    public String getBookName() { 
     return bookName; 
    } 

    public void setBookName(String bookName) { 
     this.bookName = bookName; 
    } 

    public int getBookNumber() { 
     return bookNumber; 
    } 

    public void setBookNumber(int bookNumber) { 
     this.bookNumber = bookNumber; 
    } 
} 

RepositoryInterface

public interface RepositoryInterface extends MongoRepository<Book, String>{ 

} 

실행할 실제 코드가 포함 된 Bean입니다. 책을 하나씩 또는 단일 목록으로 처리하려면 doSomething에서 두 가지 방법 중 하나를 사용하십시오.

@Component 
public class RunCode { 

    private final RepositoryInterface repositoryInterface; 

    public RunCode(RepositoryInterface repositoryInterface) { 
     this.repositoryInterface = repositoryInterface; 
    } 

    @PostConstruct 
    public void doSomething() { 
     // updateAsList(); 
     updateOneByOne(); 
    } 

    private void updateOneByOne() { 
     List<Book> books = createBookList(); 
     for(int i=0;i<books.size();i++){ 
      repositoryInterface.save(books.get(i)); 
     } 
    } 

    private void updateAsList() { 
     List<Book> books = createBookList(); 

     for (int i = 0; i < books.size(); i++) { 
      switch (i) { 
       case 0: 
        books.get(0).setBookNumber(00); 
        break; 
       case 1: 
        books.get(1).setBookNumber(11); 
        break; 
       default: 
        System.out.println("nothing per this example"); 
      } 
     } 

     repositoryInterface.save(books); 
    } 

    private List<Book> createBookList() { 
     List<Book> books = new ArrayList<>(); 
     Book book0 = new Book(); 
     book0.setBookName("Book0"); 
     book0.setBookNumber(0); 

     books.add(book0); 

     Book book1 = new Book(); 
     book1.setBookName("Book1"); 
     book1.setBookNumber(1); 

     books.add(book1); 
     return books; 
    } 
}