سؤال

وأستخدمه JPA مع openjpa تنفيذ تحت، على تطبيق الخادم جيرونيمو. أنا أيضا باستخدام قاعدة بيانات MySQL. لدي مشكلة مع تحديث الكائن مع خاصية التسجيل قيم الفارغة. عندما أحاول أن الكيان دمج مع تاريخ تعيين الخاصية إلى فارغة، يتم إنشاء أي سيناريو تحديث SQL (أو عندما يتم تعديل الحقول الأخرى، يتم إنشاء النصي تحديث SQL، ولكن ommited حقل التاريخ من ذلك). إذا تم تعيين حقل التاريخ إلى بعض الدول الأخرى لا قيمة فارغة، يتم إنشاء النصي التحديث بشكل صحيح.

هل أي شخص لديه مشكلة من هذا القبيل؟

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

المحلول

وOpenJPA يجعل بعض الافتراضات عندما كنت قد فصل (ويفترض تسلسل) كيان ثم دمج مرة أخرى.

وانها عادة التسلسل الذي ركلات في هذا النوع من المشاكل - عندما يتم تسلسل الكيان OpenJPA يفقد StateManager التي المسارات التي تم تحميلها المجالات. ونتيجة لذلك عند دمج الجزء الخلفي كيان في قيمتها لاغية OpenJPA ليس من المؤكد أن المجال تم تحميل من أي وقت مضى ويعتقد لم يتم تغييره.

وهناك زوجين من الخيارات لإصلاح هذا:

ويمكنك تكوين OpenJPA لاستخدام StateManager للتسلسل - وسوف تتبع الحقول التي قمت بتحميلها. للقيام بذلك إضافة الخاصية التالية إلى persistence.xml.

<property name="openjpa.DetachState" value="loaded(DetachedStateField=true)"/>

وأو قل OpenJPA لتحميل مجموعة من المجالات قبل أن يتم فصل الكيان. سوف OpenJPA فاعلم التي كانت موجودة المجالات، وسوف تعامل مع قيمة خالية بشكل صحيح. لديك خيارات لتحميل جلب الجماعات (مفهوم OpenJPA، ولكن افتراضيا يقوم بتحميل جميع المجالات غير LAZY)، أو كل مجال (وهذا يمكن أن تكون مكلفة).

وأود أن أوصى جلب الجماعات في معظم الحالات، وهنا الملكية لpersistence.xml.

<property name="openjpa.DetachState" value="fetch-groups"/>

ويمكنك القيام ببعض الأشياء ذكية مع الرسوم البيانية وجوه فصل إذا كنت تميل إلى ذلك. دليل OpenJPA على المزيد من المعلومات على الموقع http://openjpa.apache.org/builds/1.2.2/apache-openjpa-1.2.2/docs/manual/manual.html#ref_guide_detach_graph

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