ما هي أفضل طريقة لتحميل الرسم البياني لكائن السبات قبل استخدامه في واجهة المستخدم؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

الوضع هو هذا:

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

ما هي أفضل وسيلة لتحميل كافة الكائنات المناسبة في الرسم البياني للكائن بطريقة قابلة للتكوين بحيث يمكن الوصول إليها دون الحاجة إلى العودة إلى قاعدة البيانات لتحميل المزيد من البيانات؟

أي مساعدة.

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

المحلول

لنفترض أن لديك العميل وفي وقت ما يتعين عليك القيام بشيء ما بخصوص طلباته وربما يكون لديه مكافأة مقابل طلباته.

بعد ذلك سأحدد مستودعًا بواجهة سلسة تسمح لي بقول شيء مثل:

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

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

نصائح أخرى

إذا كان تطبيق ويب وكنت تستخدم Spring، فقد يكون OpenSessionInViewFilter هو الحل لمشاكلك.

أحد الأساليب التي نستخدمها في مشاريعنا هو إنشاء خدمة لكل عرض لديك.ثم يجلب العرض الرسم البياني الفرعي الذي تحتاجه لهذا العرض المحدد، ويحاول دائمًا تقليل عدد SQLS المرسلة إلى قاعدة البيانات.لذلك نحن نستخدم الكثير من الصلات للحصول على الكائنات المرتبطة بـ n:1.

إذا كنت تستخدم تطبيق سطح مكتب من مستويين متصل مباشرة بقاعدة البيانات، فيمكنك فقط ترك الكائنات مرفقة وتحميل بيانات إضافية في أي وقت تلقائيًا.وإلا فسيتعين عليك إعادة ربطه بالجلسة وتهيئة الارتباط الذي تحتاجه Hibernate.initialize(Object entity, String propertyName)

(نفاد الذاكرة، ربما ليس صحيحًا بنسبة 100٪)

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