سؤال

لقد قمت بإعداد تطبيق Spring Roo ، وضبط الثبات على OpenJPA وإنشاء بعض الكيانات. ثم استبدلت Spring MVC مع الويكيت Apache. يبدو أن الأشياء تعمل بشكل جيد وقد عرضت بنجاح قائمة من كيانات العملاء.

التالي كان عرض التحرير للعميل. في الوقت الحالي ، قمت بعمل شكل نصيب يستخدم كيان OpenJPA مباشرة كنموذج النموذج ، وبالتالي اضطررت إلى جعل فئة الكيان تنفذ قابلة للتسلسل.

الآن ، لست متأكدًا من كيفية تنفيذ ثبات 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 ولماذا أحصل على هذا الخطأ؟

Wicket-Wise: هل يجب أن أنشأت imodel wicket منفصلة مع نموذج عميل قابل للفصل وهل يمكن أن يكون هذا هو السبب في أن لدي هذه المشكلات؟

شكرا حفنة على أي نصيحة!

هل كانت مفيدة؟

المحلول

تفضل لنفسك وفصل طبقات التطبيق الخاصة بك. لا ينبغي أن يصل الرمز في طريقة العرض إلى قاعدة بيانات.

قم بإنشاء طبقة خدمة و / أو طبقة DAO ، واختبر الوحدة رمز تلك الطبقات لترى أنها تعمل ثم حقن DAO أو كائن خدمة في مكون الويكيت. (أوصيك باستخدام الربيع لذلك ، ولكن يمكنك أيضًا القيام بذلك يدويًا)

مع السيناريو الخاص بك ، هناك العديد من الأشياء المختلفة التي يمكن أن تفشل في مكان واحد ، ومن المستحيل تقريبًا فصلها.

إليكم بعض المؤشرات:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top