يتم حذف العلاقات على الكائنات المرتبطة في تطبيق Hibernate + Gilead

StackOverflow https://stackoverflow.com/questions/5836615

سؤال

تعديل 5/11/2011:

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

الأصل:

مرحبًا بالجميع. أواجه مشكلة مع كائن معقد نوعًا ما ؛ المشكلة هي كما يلي: عندما أرسل الكائن من العميل إلى الخادم ليتم حفظه ، يبدو أنه تمحو بشكل عشوائي العلاقات بين كثير إلى كثير على الكائنات المرتبطة. والأسوأ من ذلك ، أنني غير قادر على إعادة إنتاج المشكلة بنفسي ، بعد ما يقرب من شهرين من إدراك المشكلة. لدي التطبيق للاختبار مع مجموعة ضمان الجودة ؛ يستخدمون البرنامج يوميًا ، ويدخلون مرتين في التطبيقات الجديدة والقديمة. تظهر المشكلة ثلاث مرات في اليوم.

سأبذل قصارى جهدي لتقديم أكبر قدر ممكن من التفاصيل ، وأقدر بشدة أي شخص يلقي نظرة!

إطار عمل التطبيق هو GWT 2.1 + Gilead + Hibernate 3 + MySQL InnoDB. أترك Hibernate يتعامل مع أي تتابع وما إلى ذلك ، لذلك لم يتم تعريف أي منها في قاعدة البيانات ، على الرغم من تعيين جميع المفاتيح الخارجية في قاعدة البيانات.

إليك بعض المقتطفات من التعيينات: Genacodicetagpre

يعد حفظ الكائن مجرد دعوة إلى saveOrUpdate ():

Genacodicetagpre

يعد "updateUser" للإغلاق كائنًا يتم تحميله عند تسجيل دخول المستخدم. ويتم تحميله بالمجموعات والأذونات المرتبطة بحيث يمكن للنظام منح / رفض الوصول إلى وحدات التطبيق. أفعل Genacodicetagpre

قبل إرسال الكائن مرة أخرى إلى الخادم.

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

لقد أمضيت وقتًا طويلاً في الاطلاع على مستندات Hibernate الرسمية ، والبحث عن المشكلات ذات الصلة المحتملة ، وما إلى ذلك ، واعتقدت أنه ربما كان الوقت المناسب لطلب المساعدة. يجب أن أكون رجلاً وأستمر في ذلك ، ولكن ربما سيساعدني السؤال فقط في اكتشاف ذلك.

لست متأكدًا مما سأقدمه الآن ذي الصلة. نأمل أن ما هو موجود هنا حتى الآن له صلة بالموضوع!

شكرًا على الاستماع

تعديل

Genacodicetagpre

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

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

المحلول

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

هذا مشروع كبير نوعًا ما ، حوالي 50 كائن نطاق ، يحتوي بعضها على العديد من اقترانات الكائنات. استغرق الأمر حوالي 40-50 ساعة لإعادة كتابة كل شيء من استخدام Gilead + GWT RPC إلى استخدام RequestFactory حصريًا. أنا سعيد جدًا بالتغييرات الناتجة في الكود والهيكل. لست منزعجًا جدًا حتى الآن من خلال الاضطرار إلى إنشاء كائنات وكيل DTO ، واغتنمت الفرصة للتبديل إلى Hibernate Annotations ، والتخلص من ملفات التعيين.

كان من الصعب في بعض الأحيان إعادة تشكيل الكود لاستخدام دورات الجلب / التعديل / الحفظ التي يتطلبها RequestFactory. لقد منحتني الفرصة لتحسين بعض التعليمات البرمجية.

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

صادفت بعض الموارد الرائعة أثناء تعلم RequestFactory + Hibernate ، والعديد منها من خلال StackOverflow (شكرًا مرة أخرى!):

استخدام GWT RequestFactory مع Objectify - كان من الرائع التعرف على كيفية تفاعل RequestFactory مع الواجهة الخلفية ، وبعض الأساليب والنماذج المعيارية لتقليل الكود.

أتمنى المزيد من الروابط أدناه .. ما زلت مستجدًا ، لذا فإنني مقيد بعدد # من الارتباطات التشعبية التي يمكنني نشرها :)

لقد تعلمت الكثير ، وأتحدث بطلاقة في RequestFactory. سأبذل قصارى جهدي لمراقبة ومساعدة هنا حيث أعتقد أنني أستطيع.

شكرًا StackOverflow!

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