Я настроил приложение Spring ROO, установил постоянство в OpenJPA и создал несколько объектов. Затем я заменил Spring MVC на Apache Wicket. Кажется, все работает нормально, и я успешно отобразил список объектов Customer.
Следующим было представление редактирования для клиента. На данный момент я сделал форму 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: Должен ли я создать отдельную Wicket IModel с отсоединяемой моделью клиента, и может ли это быть причиной этих проблем?
Громадное спасибо за любой совет!