لماذا يتسبب البرنامج الإضافي Grails Searchable في حدوث أخطاء في Hibernate AutoFlush؟

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

سؤال

في ال الكؤوس 1.2.5 المشروع الذي أحاول استكشاف الأخطاء وإصلاحها، نستخدم Grails البرنامج المساعد للبحث .5.5.1.

المشكلة هي أنه عندما نحاول فهرسة مجموعات كبيرة من فئات النطاق، تستمر Grails في طرح ما يلي:

خطأ hibernate.AssertionFailure - حدث فشل في التأكيد (قد يشير هذا إلى وجود خطأ في السبات ، ولكن على الأرجح بسبب الاستخدام غير الآمن للجلسة) org.hibernate.assertionfailure:لم تتم معالجة المجموعة [فئة المجال] بواسطة Flush ()

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

يتم استخدام البرنامج المساعد القابل للبحث كما يلي:

  1. قم بإنشاء جلسة بوصلة باستخدام compass.openSession()
  2. بدء معاملة البوصلة: compassSession.beginTransaction()
  3. ثم compassSession.create(result.get(0)) يتم استدعاؤه على فئة مجال مهمة غير مفهرسة
  4. أخيراً compassTransaction.commit() يتم استدعاؤه لارتكاب الصفقة.
  5. انتقل إلى 2 وقم بمعالجة فئة المجال التالي

بين فئتي المجال الثالث والرابع، يتم تشغيل التدفق التلقائي الذي يؤدي إلى الخطأ.

هل يمكن لأي شخص أن يعطيني أي تلميحات حول كيفية حل هذه المشكلة؟

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

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

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

المحلول

هذا المقال ساعدني على فهم ذلك.يجب أن تقوم ببعض استعلامات السبات في جلسة تحتوي على كائنات قذرة، ويتم الحصول عليها flush()-ed في منتصف التعديل.

في بعض الأحيان يكون من الممكن نقل كافة استعلامات القراءة فقط خارج المعاملة، قبل حدوث أي تعديل، وإجراء التعديلات فيها withTransaction{}.

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