Хороший способ для создания клона из набора коллекций базы данных - PullRequest
0 голосов
/ 07 февраля 2020

У меня 12 коллекций в MongoDB. Например:

public class User {
    private String id;
    private String name;
}

public class Book {
    private String id;
    private String userId;
    private String name;
}

public class Order {
    private String id;
    private String userId;
    private String bookId;
}

и другие объекты. У меня есть один пользователь, две книги и пять заказов в БД. Это шаблоны. Теперь мне нужно создать копию всех этих объектов. Мне нужно иметь один и тот же набор сущностей с разными идентификаторами. Например, у меня есть эти данные:

User1 -  templateUserId, John Doe
Book1 -  templateBookId1, templateUserId, Fight Club
Book2 -  templateBookId2, templateUserId, Some adventures
Order1 - templateOrderId1, templateUserId, templateBookId1
Order1 - templateOrderId2, templateUserId, templateBookId2 
...

Мне нужен метод вызова, подобный createFromTemplate("templateUserId"), и я получаю эти данные:

User1 -  newUserId, John Doe
Book1 -  newBookId1, newUserId, Fight Club
Book2 -  newBookId2, newUserId, Some adventures
Order1 - newOrderId1, newUserId, newBookId1
Order1 - newOrderId2, newUserId, newBookId2 
...

Теперь у меня есть один большой метод.

1) I make the clone of the user and set a new id. 
2) Select a list of books by templateUserId. 
  2.1) Change userId
  2.2) Create new BookId 
  2.3) Fill Map<String, String> where the key is old BookId and value is new BookId.
3) Select all orders by templateUserId
 3.1) if order's BookId contains in the map I get new BookId and set to this order
 3.2) Change OrderId

И у меня много сущностей с отношениями по идентификаторам. Я ищу что-то проще. Может быть, дизайн шаблона. Я попробовал командование, цепь. Но я не понимаю, как это реализовать.

У меня нет транзакций в проекте, у меня нет таких отношений, как oneToMany или ManyToOne, как в Hibernate (у нас Mongo + Morphia). Мне нужно реализовать что-то вроде отката.

В двух словах - мне нужно выбрать набор различных объектов из БД, клонировать его и сохранить. Если у меня есть исключение, мне понадобятся изменения отката.

...