Как скопировать запись с помощью Hibernate (на Java)? - PullRequest
6 голосов
/ 17 ноября 2010

Как лучше всего скопировать запись в той же таблице?

Примерно так:

Address address = AddressDAO.get(id);
address.setId(null);
AddressDAO.add(address);

Ответы [ 5 ]

5 голосов
/ 17 ноября 2010

Да, это должно работать.

Я не уверен, что hibernate не проверяет ссылки на объекты, поэтому, если это не сработает, вам может понадобиться создать новый экземпляр и скопировать все свойства (используя BeanUtils.copyProperties или даже BeanUtils.cloneBean(..)), и затем установите идентификатор в ноль / 0.

2 голосов
/ 22 апреля 2013

Используется на каскаде Evict для этого объекта в спящем режиме.

тогда

Address address = AddressDAO.get(id);
 AddressDAO.evict(address); //Internally session.evict(address);
address.setId(null); // If id is autogenerated
AddressDAO.add(address);
2 голосов
/ 17 ноября 2010

Это будет работать, но лучше, если вы выразите свое намерение (клонирование) в режиме вашего домена.Установка поля в ноль - просто деталь реализации и не имеет никакого смысла.

Address address = AddressDAO.get(id);
Address clone = address.cloneMe();
AddressDAO.add(clone);
1 голос
/ 17 ноября 2010

Предлагаю попробовать.Если adress все еще является постоянным (привязанным к сеансу), я предполагаю, что будут проблемы.Вам может потребоваться session.evict(address) перед установкой идентификатора на ноль.

0 голосов
/ 13 февраля 2013

Это не сделает глубокую копию ... поэтому ваша копия будет ссылаться на дочерние объекты оригинальных объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...