У меня 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). Мне нужно реализовать что-то вроде отката.
В двух словах - мне нужно выбрать набор различных объектов из БД, клонировать его и сохранить. Если у меня есть исключение, мне понадобятся изменения отката.