سؤال

لا بد لي من تصميم نموذج بيانات (في تطبيق Java EE 6) والذي سيستمر عبر JPA، ويحتاج أيضًا إلى إجراء تسلسل عبر JAXB.في المرة الأخيرة التي قمت فيها بذلك، كان لدي مجموعة واحدة من فئات الكيانات مع تعليقات JAXB التوضيحية، وأخرى مع تعليقات JPA التوضيحية.هذا يعني أنه كان عليّ الحصول على الكثير من التعليمات البرمجية المعيارية للترجمة بين الاثنين.أفكر في الجمع بينهما، بحيث يكون لكل فصل كلا النوعين من التعليقات التوضيحية.انا اعرف هذا يستطيع يتم ذلك، ولكن سؤالي هو، يجب يكون؟هل سيسبب أي مشاكل؟

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

المحلول

السؤال واسع بعض الشيء بالنسبة لي للإجابة عليه.ولكن لدي خبرة محددة ذات صلة باستخدام جاكسون ضمن JAXB مع كيانات JPA التي قد تجدها مثيرة للاهتمام.

في حالتي، كان لدي نموذج JPA يحتوي على ما يقرب من ثلاثين كيانًا والكثير من المراجع الدورية.كان الرسم البياني للعلاقات بين الكيانات أيضًا مرتبطًا بقوة تقريبًا.بمعنى آخر، كان من الممكن الانتقال إلى أي كيان تقريبًا في المجموعة من أي كيان آخر عن طريق اتباع علاقات الكيانات.في حالتي، مع الكيانات كما هو موضح وJackson 1.5، تبين أن تراكب تعليقات JAXB التوضيحية على كيانات JPA الخاصة بي فكرة سيئة.

لسبب واحد، دخل جاكسون 1.5 في عودية لا نهائية على المراجع الدورية.أنا أعتبر خطأ المشغل هذا وليس خطأ.جاكسون هو برنامج رائع.وأعتقد أيضًا أن الإصدار 1.6 القادم يوفر ميزات جديدة للتعامل مع هذا الأمر جاكسون-235.لذلك قد يكون هذا موضع نقاش قريبا!

الصعوبة الأخرى التي أواجهها تتعلق بالاكتناز المتسلسل في مواجهة الكيانات المرتبطة بقوة.كان إجراء تسلسل لجميع علاقات الكيانات الخاصة بي غير عملي.كنت سأقوم بتسلسل كمية فاحشة من المعلومات غير ذات الصلة في كل طلب من خلال متابعة جميع علاقات الكيانات بسذاجة إلى عمقها الكامل.

كنت أرغب في تحديد تسلسلات متعددة لكائنات JAXB الخاصة بي، واختيار واحدة تحتوي على الحقول والعلاقات المناسبة اعتمادًا على الاستخدام المقصود.لكن، على حد علمي، لا تقدم JAXB وJackson مثل هذه المرونة.أنها توفر مرونة كبيرة في تحديد ال التمثيل - ما هو العابر، كيف تبدو القوائم، وما إلى ذلك.- لكنني لا أعتقد أنه من الممكن تمثيلات متعددة لكائن واحد.ربما تكون هناك طريقة ذكية لتحديد تمثيلات متعددة ضمن JAXB أو Jackson والتبديل في وقت التشغيل...سأكون مهتمًا بمعرفة ما إذا كان هناك شيء من هذا القبيل.ربما هناك ميزة أجهلها في هذا، أو بعض الحيل التي يمكن لعبها مع الفئات الفرعية.لكنني لم أتمكن من العثور عليه، لذا استسلمت في النهاية وذهبت مع DTOs.

مرة أخرى، كل هذا خاص جدًا بالنموذج.ربما لا تمثل هذه مشكلات بالنسبة لك (أو ربما لديك حلول ذكية لهذه المشكلات!)

نصائح أخرى

يمكن القيام بذلك بالتأكيد.أجد في الواقع أن احتمال الحفاظ على الكود للنسخ بين النماذج أكثر إشكالية.

إكليبس لينك يعد خيارًا رائعًا لهذا التطبيق لأنه يحتوي على كل من JPA (EclipseLink هو RI ومفتوح المصدر من TopLink)، وتنفيذ JAXB.

إكليبلينك جاكسب (موكسي) يحتوي أيضًا على عدد من الامتدادات لتعيين كيانات JPA إلى XML:

لمزيد من المعلومات، راجع:

يتيح DataNucleus الاستمرارية باستخدام JPA إلى RDBMS (باستخدام JDBC خلف الكواليس) وXML (باستخدام JAXB خلف الكواليس).يمكنه تفسير تعليقات JPA التوضيحية الخاصة بك على أنها تحدد كيفية إجراء تسلسل JAXB - يمكنك إضافة تعليقات JAXB التوضيحية أيضًا إذا كنت ترغب في ذلك

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