سؤال

تحياتي أقوم بتطوير غير ويب باستخدام Spring+Hibernate. سؤالي هو كيف تتعامل heibernatedaosupport مع التحميل الكسول ، لأنه بعد مكالمة تفعل DAO ، تم إغلاق الجلسة.

ألقِ نظرة على متابعة PSUEDO-CODE:

داو مثل:

CommonDao extends HibernateDaoSupport{
 Family getFamilyById(String id);
 SubFamily getSubFamily(String familyid,String subfamilyid);
}

نموذج المجال مثل:

Family{
 private List<SubFamily> subfamiles;
 public List<SubFamily> getSubFamiles();
}

SubFamily{
 private Family family; 
 public Family getFamily();
}

في التطبيق ، أحصل على DAO من Suntext وأرغب في اتباع العمليات. هل من الممكن القيام بهذا التحميل الكسول لأن AFAIK بعد كل طريقة (getFamilyByid () ، getBfamily ()) تم إغلاق الجلسة.

CommonDAO dao=//get bean from application context;
Family famA=dao.getFamilyById(familyid);
//
//Do some stuff
List<SubFamily> childrenA=fam.getSubFamiles();

SubFamily asubfamily=dao.getSubFamily(id,subfamilyid);
//
//Do some other stuff
Family famB=asubfamily.getFamily();
هل كانت مفيدة؟

المحلول

سؤالي هو كيف تتعامل heibernatedaosupport مع التحميل الكسول ، لأنه بعد مكالمة إلى DAO ، تم إغلاق الجلسة.

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

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

بعض المواضيع التي قد ترغب في قراءتها:

نصائح أخرى

عند المزيد من الوقت والتحقيق يبدو أن هذا سلوك "طبيعي".الخطأ لا يهم حقا ويتم إلقاؤه بأفضل ما أستطيع أن أقول؛قد لا يكون حتى خطأ في الحياة الفعلية في الواقع.يبدو أن عملاء المكتب يفعلون بعض الأشياء التي يقومون بذلها.

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