Я пытаюсь реализовать экран изменения изменений/отмены изменений.Слишком новый созданный объект Hibernate
У меня есть одна основная сессия спящего режима. Когда кто-то хочет редактировать объект, я создаю временный сеанс и объединяю объект из основного сеанса.
// To edit Object x with id id_x
Object a = mainSession.get(id_x);
Object b = tempSession.merge(a);
// Change object b with tempSession
// If save: mainSession.merge(b) and discard tempSession.
// If cancel: discard b and tempSession.
...
...
// If saveAll: mainSession.flush();
// If cancellAll: mainSession.rollback(), reload all objects.
Это работает с элементами, которые уже находятся в базе данных. Но когда я хочу применить ту же логику с вновь созданным объектом, tempSession.merge (a) терпит неудачу.
Object d = new Object();
mainSession.save(d);
// To edit Object d with id id_d
Object a = mainSession.get(id_d);
Object b = tempSession.merge(a); // The application gets blocked/locked here.
Я думаю tempSession.merge пытается загрузить объект из базы данных, так как tempSession не имеет объекта с id_d, но так как объект не существует в базе данных или таблицы/строках Заблокировавший не удается. Есть ли способ создать копию объекта d и прикрепить его к tempSession, а затем снова присоединить его к mainSession? Или вы можете предложить альтернативные способы его реализации?
Пользователь перешёл список элементов. Пользователь выбирает элемент из списка и редактирует его. Затем он/она сохраняет изменения или отменяет их. И позже, когда он закончит редактирование всех предметов, он может выбрать «Сохранить все» или «Отменить все». Для этой функции я должен обновлять базу данных только тогда, когда пользователь нажимает кнопку «Сохранить все». Для «промежуточных действий« Сохранить/Отменить »мне нужно создать копию объекта, если пользователь выберет« Отмена ». Пользователь также может редактировать один и тот же элемент более одного раза (отредактировать объект A, сохранить его, отредактировать объект B, сохранить его, а затем повторно отредактировать A и сохранить его). – exoz
Если я вызываю обновление, я думаю, что объект снова получает значения из базы данных, тогда я проиграю предыдущие изменения. – exoz
@exoz: Если вам нужна копия объекта, было бы лучше клонировать объект вручную (возможно, используя «Clobeable»), а не полагаться на Hibernate, чтобы сделать это. – axtavt