Я пытаюсь реализовать экран сохранения изменений / отмены изменений.
У меня есть один основной сеанс гибернации.Когда кто-то хочет отредактировать объект, я создаю временный сеанс и объединяю объект из основного сеанса.
// 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?Или вы можете предложить альтернативные способы реализации этого?