إذا حدث استعلام متتالي في السبات ، فقد تكون هناك مشاكل في التحميل كسول. على سبيل المثال ، لدي الآن فئة حساب (مسؤول) ، فئة الفئة (فئة المنتج) وفئة المنتج (المنتج). من اليسار إلى اليمين ، إنها علاقة واحدة إلى حد ، ومن اليمين إلى اليسار ، تم تعيين manytoone (fetch = fetchtype.lazy). أريد الآن معرفة معلومات المنتج وحزمه بتنسيق JSON لتمريره إلى مكتب الاستقبال. يمكنني استخدام بيان الاستعلام في الخلفية على النحو التالي:
من المنتج P اليسار ، انضم إلى Fetch P.Category حيث P.Name مثل: الاسم
وبهذه الطريقة ، يمكنك معرفة المنتج ، ثم يتم وضع الفئة الموجودة في المنتج أيضًا. ومع ذلك ، فإن الحساب في الفئة ليس كائنًا فعليًا ، ولكنه كائن وكيل مؤقت. هذا سهل الفهم ، لأنني راجعت المنتج وفئة متتالية فقط. بالنسبة للفئة والحساب ، يتم تكوينها وفقًا للمادة (كسول).
الآن ضع منتج الاستعلام في الخريطة ، ثم قم بتحويله إلى تنسيق JSON والعودة إلى مكتب الاستقبال ، سيكون هناك بالتأكيد مشكلة في التحميل كسول ، لأنه سيتم أخذ كائن الحساب أثناء عملية تحويل JSON ، ولكن تم إغلاق الجلسة في هذا الوقت ، لذلك سيتم الإبلاغ عن خطأ. حل مباشر للغاية ولكنه ليس جيدًا هو تغيير الكسل في الفئة إلى حريصة ، بحيث يمكن العثور على معلومات الحساب ، ولكن هذا ليس جيدًا. لذلك نستخدم طريقة أخرى: اضبط قائمة سوداء في Struts.xml ، ونستخدم تعبيرات منتظمة لتصفية الحساب في الفئة عند التحويل إلى تنسيق JSON ، لذلك لن نتحقق من كائن الحساب ، ولن تكون هناك مشكلة في تحميل كسل. على النحو التالي:
في هذه المرحلة ، لا ينبغي أن تكون هناك مشكلة. ومع ذلك ، في مشروعي ، ما زلت أبلغ عن استثناءات تحميل كسول ، مما يعني أنه لا يعمل بعد تكوينه بهذه الطريقة. ولكن من الناحية النظرية ، بعد التكوين ، سيكون الأمر جيدًا ، ويمكن تعبئة البيانات بتنسيق JSON وتم نقلها إلى مكتب الاستقبال بشكل طبيعي. أزعجتني هذه المشكلة لمدة يومين ، لذلك قمت ببساطة بتغيير كسول إلى حريصة وبدأت في القيام بالمشروع.
اليوم اتصلت بالاستثناء هنا في استثناء سبات آخر وحله! اليوم في Hibernate ، أريد الاتصال بالطريقة GET للحصول على معلومات المنتج ، لكن لا يمكنني الحصول عليها. لا توجد رسالة على وحدة التحكم في الخلفية. منذ أن قمت بتشغيل وضع dev ، عرض مكتب الاستقبال رسالة الخطأ:
java.lang.classcastexception: cn.it.shop.model.product _ $$ _ javassist_0 لا يمكن إلقاؤها إلى javassist.util.proxy.proxy </span>
لا يمكن تحويلها إلى وكيل؟ ؟ لماذا تتغير إلى وكيل؟ بشكل عام ، ألا يمكن تحويل الوكلاء إلى كائنات فعلية؟ لذلك فتشت الإنترنت ووجدت أن هذه المشكلة قد تكون بسبب حزمة جار جافاسست في المشروع التي تتعارض. ذهبت إلى المشروع للتحقق من ذلك ، واتضح أنه صحيح:
إنه يتعارض حقًا ... لذلك أنا فقط أحذف Javassist-3.11.0.ga.jar في حزمة Struts. Hibernate صحيح ، ويمكنك الحصول على معلومات المنتج بشكل طبيعي. ثم تذكرت مشكلة التحول إلى struts2 إلى JSON قبل يومين ، لذلك عدت إلى التغيير إلى الكسول. لقد اختفت المشكلة ويمكنني أيضًا التحول إلى JSON بشكل طبيعي. كنت مكتئبًا. كان سببها حقا الصراع بين حزم جرة. لأنه لم يكن هناك خطأ في ذلك الوقت ، لكنني لم أتمكن من العثور على بيانات JSON التي تم إرجاعها على مكتب الاستقبال. كنت أعرف فقط أن بيانات JSON لم يتم إرجاعها. يجب أن تكون مشكلة في نقل الخلفية إلى JSON. وفقًا للتجربة الحالية ، كان 90 ٪ من التحميل كسول ، لكنني لم أكن أتوقع أن يكون ناتجًا عن نزاع حزمة JAR.
في وقت لاحق: إذا لم تتعارض حزمة JAR ولكن لا يمكنها تحويل JSON ، فهي مشكلة في الأساس بسبب التحميل الكسول. طريقة تصفية كائنات التحميل البطيئة عن طريق تكوين قوائم سوداء في Struts.xml عملية للغاية. ليست هناك حاجة لتعديل التكوين في POJO. سأقوم بنقل الحقول التي أريد نقلها إلى JSON ، وإذا كنت لا أرغب في ذلك ، فهذا مريح للغاية.
الرابط الأصلي: http://blog.csdn.net/eson_15/article/details/51394302
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.