2012-05-09 2 views
0

Я пытаюсь сохранить один объект JPA дважды, так как хочу сохранить родительский элемент и изменения моих статей.Сохранение объекта JPA дважды

Когда я создаю новую статью, я действительно хочу создать родительский элемент и ревизию, которая является дубликатом родительского элемента. Что-то вроде:

Article parent = new Article(); 
Article revision = parent.clone(); 

em.persist(parent); 
em.persist(revision); 

Но что на самом деле происходит то, что я получаю следующее исключение на втором вызове сохраняются:

org.hibernate.StaleStateException: 
    Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 

Как я могу клонировать статью так, что я не буду получать такие исключения ?

+0

Можете ли вы показать свой метод 'clone()'? Возможно, вы должны переписать его, не указав для скопированного объекта идентификатор исходного. – sp00m

+0

Является ли первичный ключ автоматическим сгенерированным или вы его генерируете и устанавливаете. Если вы его сгенерируете, то клон, возможно, скопировал идентификатор в ревизию и вызвал бы проблему. – raddykrish

+0

Ключ автогенерируется. Я убедился, что он не скопирован. Очевидно, что метод «клон» копирует некоторые свойства HIbernate, что нежелательно. –

ответ

0

Ваш метод клонирования копирует @Id (и, возможно, @Version) тоже? Вы действительно должны предоставить своей копии новый идентификатор (или если вы используете @GeneratedValue, несохраненное значение, чтобы генерировалось новое значение).

+0

Оба родителя и ревизии имеют @GeneratedValue, поэтому для обоих из них значение генерировалось автоматически. –

Смежные вопросы