تلخص هذه المقالة أربع طرق لحل مشكلة التحميل الكسول لإسبات في عملية تعلم السبات.
يتم تأخير التحميل الكسول المزعوم ، وتأخر التحميل.
متى تستخدم التحميل كسول؟ لا يمكنني إلا أن أجيب على ذلك عندما تريد استخدام التحميل الكسول ، واستخدام التحميل كسول.
بالنسبة إلى سبب حاجة إلى استخدام التحميل البطيء ، فمن الواضح أنه عندما تكون كمية البيانات التي نريد الوصول إليها كبيرة جدًا ، فمن الواضح أنها ليست مناسبة لاستخدام ذاكرة التخزين المؤقت ، لأن سعة الذاكرة محدودة. من أجل تقليل مقدار التزامن وتقليل استهلاك موارد النظام ، ندع البيانات يتم تحميلها عند الحاجة ، ثم نستخدم التحميل كسول.
على سبيل المثال ، هناك كائن موظف وكائن آخر هو القسم. من الواضح ، بالنسبة للموظف ، إنها علاقة كثيرة مقارنةً بالإدارة ، وبالنسبة للإدارة ، فهي علاقة فردية مقارنة بالموظف. عندما نستفسر عن كائن الموظف ، إذا أردنا الاستعلام عن القسم المقابل من خلال قسم العقارات في كائن الموظف ، فسيتم طرح استثناء. هذا بسبب وجود التحميل كسول. بعد إغلاق الجلسة ، يصدر السبات طلبًا آخر إلى قاعدة البيانات ، ويتم طرح استثناء.
فيما يلي أربع طرق لحل هذه المشكلة:
1. تهيئة صريحة (داخل طريقة الاستعلام)
عند سؤال القسم الذي ينتمي إليه الموظف ، تحتاج إلى ما قبل الإدارة
استخدم البيان
hibernate.initialize (Department.class) ؛
2. قم بتعديل ملف علاقة الكائن وإعادة كتابة Lazy Lazy = fals
يمكن للطريقتين أعلاه أن تحل المشكلة بالفعل ، ولكن العيب هو أنه بغض النظر عما إذا كان الكائن يستخدم لاحقًا ، فإن السبات سيصدر عبارات SQL إلى قاعدة البيانات لطلب البيانات ، مما تسبب في نفايات الأداء غير الضرورية.
3. استخدام المرشحات (مشروع الويب)
① يجب أن تستخدم الطريقة للحصول على الجلسة getCurrentsession
② طريقة جلسة الإغلاق الخاصة
Public Void dofilter (طلب ServletRequest ، استجابة ServleTResponse ، Filterchain Arg2) يلقي ioException ، ServleTexception {// todo method method session session = null ؛ المعاملة tx = فارغة ؛ حاول {session = hibernateutil.getCurrentsession () ؛ tx = session.begintransaction () ؛ arg2.dofilter (طلب ، استجابة) ؛ // طلبات مستمرة tx.commit () ؛ } catch (استثناء e) {// todo: التعامل مع الاستثناء if (tx! = null) {tx.rollback () ؛ }} أخيرًا {// طريقة إغلاق خاصة hibernateutil.closecurrentsession () ؛ }}4. في إطار SSH ، استخدم OpenSessionView المقدمة من الربيع
يشبه المبدأ استخدام المرشح في الطريقة الثالثة ، باستثناء أن هذا المرشح يتم توفيره بحلول الربيع. عند استخدامه ، تحتاج فقط إلى تكوينه في ملف web.xml على النحو التالي:
<!-استخدم الربيع لحل مشكلات التحميل البطيئة-> <filter> <filter-name> OpenSessionInViewFilter </filter-name> <lipter-class> org.springframework.orm.hibernate3 <Filter-Name> OpenSessionInViewFilter </filter-name> <url-pattern>/*</url-pattern> </filet-mapping>
يمكن للطرق في 3 و 4 أيضًا حل مشكلة التحميل الكسول ، ويتم استخدام الطريقة الرابعة أيضًا بشكل متكرر في الوقت الحاضر. ومع ذلك ، فإن هاتين الطريقتين لهما عيوب. العيب هو أنها تطيل الوقت الذي يتم فيه إغلاق الجلسة وتصبح دورة حياة الجلسة أطول. قبل استخدام هذه الطريقة ، تم إغلاق الجلسة بعد الاستعلام عن البيانات ؛ الآن ، تم إغلاق الجلسة في نهاية طلب الويب.
لخص
ما سبق هو كل شيء عن الطرق الأربع لحل مشكلة التحميل الكسول من السبات. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!