Я установил приложение Spring ROO, установил постоянство для OpenJPA и создал несколько сущностей.
Затем я заменил Spring MVC на Apache Wicket. Вещи, кажется, работают нормально, и я успешно отобразил список сущностей клиентов.
Затем был вид редактирования для клиента. На данный момент я создал форму Wicket, которая использует сущность OpenJPA непосредственно в качестве модели формы, и поэтому мне пришлось сделать класс сущностей реализующим Serializable.
Теперь я не уверен, как правильно реализовать постоянство OpenJPA, теперь у меня есть следующее:
@Override
protected void onSubmit() {
try {
if (customer.getId()!=null) {
customer.merge();
}
else {
customer.persist();
}
}
catch (Exception e) {
throw new Error(e);
}
super.onSubmit();
}
Это работает, но только один раз для объекта Customer. Каким-то образом.
То есть я отправляю свою форму один раз, и она работает как с новым клиентом (.persist ()), так и с существующим клиентом (.merge ()). Однако я снова отправляю форму для того же клиента, у которого появляется эта ошибка (я добавил несколько разрывов строк здесь):
<openjpa-2.0.0-r422266:935683 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException:
An optimistic lock violation was detected when flushing object instance "no.magge.iumb.domain.crm.PrivateCustomer-379" to the data store.
This indicates that the object was concurrently modified in another transaction.
У меня вопрос: как правильно сохранить OpenJPA и почему я получаю эту ошибку?
Wicket-wise: Должен ли я создать отдельную IModel Wicket с отсоединяемой моделью Customer и может ли это быть причиной того, что у меня возникли эти проблемы?
Большое спасибо за любые советы!