Резервное копирование и восстановление базы данных с Hibernate - PullRequest
0 голосов
/ 26 октября 2019

Я хотел бы иметь возможность резервного копирования и восстановления базы данных через Hibernate.

поток:

1) Получить все сущности из каждой таблицы в HashMap и сериализовать всю карту в файл.

2) Очистить все сущности из базы данных.

3) Десериализовать файл и сохранить все сущности обратно в базу данных.

На шаге 3 я сталкиваюсь с:

javax.persistence.OptimisticLockException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [*.*.entities.User#1]

Это происходит с этим фрагментом кода:

session.saveOrUpdate(entity);
session.getTransaction().commit(); // <- here

Все мои сущности расширяют BasicEntity, который имеет только это определение идентификатора:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

Что я делаю не так? Я думаю, что я не могу сохранить сущность (восстановить из файла), которая имеет некоторый идентификатор, но мне нужно сделать это и сохранить текущий идентификатор (чтобы сохранить связь между сущностями), но гибернация не позволит мне сделать это.

Спасибо за любой ответ.

1 Ответ

0 голосов
/ 26 октября 2019

Похоже, что другой поток обновляется в БД перед текущим коммитом. попробуйте один из следующих вариантов

//check if it's in the cache, if it's then refresh and then saveorupdate
if (session.contains(entity) session.refresh(entity);
saveOrUpdate(entity);

//Load the object from the database and then update
dbEntity= session.load(classname.class, 2);
saveOrUpdate(dbEntity);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...