Вопрос

Я настроил приложение Spring ROO, установить постоянство в OpenJPA и создал некоторые объекты. Затем я заменил весну MVC с Apache Wicket. Вещи, кажется, работают нормально, и я успешно продемонстрировал список объектов клиентов.

Рядом был представление редактирования для клиента. На данный момент я сделал форму калитки, которая использует объект OpenJPA непосредственно как модель формы, и поэтому мне пришлось сделать класс Entity Allse 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();
}

Это работает, но только один раз за объект клиента. Как-то. То есть я представляю свою форму один раз, и это работает как с новым клиентом (.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 и почему я получаю эту ошибку?

WikeT-Wise: Должен ли я создать отдельный калитку Imodel с съемной моделью клиента и может это стать причиной того, что у меня есть эти проблемы?

Спасибо кучу за любой совет!

Это было полезно?

Решение

Сделайте сам одолжение и отделите свои слои приложений. Код с видом не должен получить доступ к базе данных.

Создайте сервисный слой и / или слой DAO, агрегат тестируйте код этих слоев, чтобы увидеть, что они работают, а затем вводят свой объект DAO или SERVICE в компонент Wicket. (Я бы порекомендовал вам использовать весну для этого, но вы также можете сделать это вручную)

С вашим сценарием настолько много разных вещей, которые могут потерпеть неудачу в одном месте, и почти невозможно отделить их.

Вот некоторые указатели:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top