Kodo: كيف تم إعداد خطة جلب للعلاقات ثنائية الاتجاه؟

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

  •  27-09-2019
  •  | 
  •  

سؤال

تشغيل Kodo 4.2 ووجود مشكلة غير فعالة يتم إنشاء استفسارات غير فعالة بواسطة Kodo. يحدث هذا عند جلب كائن يحتوي على مجموعة حيث تحتوي هذه المجموعة على علاقة BidRectional مرة أخرى إلى الكائن الأول.

Class Classroom
{
     List<Student> _students; 
}

Class Student
{
     Classroom _classroom;
}

إذا أنشأنا خطة جلب للحصول على قائمة بالفصول الدراسية وطلابهم المقابلين عن طريق إعداد خطة الجلب التالية:

fetchplan.addfield (classroom.class ، "_ students") ؛

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

ومع ذلك ، إذا قمنا بتضمين المرجع إلى الفصل الدراسي في خطة الجلب الخاصة بنا حتى يتمكن من الحصول على حقل _classroom من خلال القيام بتقديم fetchplan.addfield (student.class ، "_classroom") ، سيؤدي هذا إلى عدد X من الاستعلامات الإضافية حيث x هو عدد الطلاب في كل فصل دراسي.

هل يمكن لأي شخص أن يشرح كيفية إصلاح هذا؟ لدى Kodo بالفعل كائنات الفصول الدراسية الأصلية عند نقطة تنفيذ الاستعلامات لاسترداد كائنات الفصل ووضعها في حقل _Classroom لكل كائن الطالب. لذلك أتوقع أن يقوم Kodo ببساطة بتعيين هذه الكائنات في حقل _classroom على كل كائن طالب وفقًا لذلك وعدم العودة إلى قاعدة البيانات.

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

ملاحظة- يتم تشغيل eager_fetch.paralled وقد جربت هذا مع التخزين المؤقت (الاستعلام واخبارات البيانات) تشغيل وإيقاف تشغيله ولا يوجد فرق في الاستعلامات الناتجة.

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

المحلول

عملت مع Oracle Support في هذا- هذا عيب في Kodo 4.2 (أحدث إصدار). يجب أن تخرج السمة الافتراضية للمجموعة الافتراضية تمامًا (لا تضعها فقط على صواب أو خطأ) من ملف بيانات تعريف JDO للحقول الموجودة على الجانب الآخر من العلاقة ثنائية الاتجاه. لذلك في المثال أعلاه ، يمكنك إخراج سمة المجموعة الافتراضية لحقل الطالب.

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