2016-12-19 2 views
0

Я выполняю повтор по списку объектов и сохраняю один объект за раз после каждого цикла. Я обнаружил, что только последний объект всегда сохраняется при использовании интерфейса MongoRepository.Интерфейс репозитория сохраняет только последний экземпляр объекта, когда в цикле for и объемной вставки меняет объекты перед сохранением

, например

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

В этом случае, только последний объект сохраняется, когда около 3 объектов в ObjectList.

Опять же, если 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

Где в примере кода вы создаете книгу под названием «Книга 2»? –

ответ

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>{ 

} 

Бин, содержащий фактический код для выполнения. Используйте любой метод в 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; 
    } 
} 
Смежные вопросы