يتتالي في (ن) السبات، ما القواعد التي أحتاجها؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

آسف إذا كان هذا هو Dupe، لم أستطع العثور عليه ولكن لم يعرف حقا ما هو البحث عنه، على أي حال ...

لدي ثلاث فصول، Parent, Child و Other

Parent لديه الكثير Child حيث الطفل لديه Parent_Id عمودي

Other يحمل إشارة إلى Child من خلال Child_Id عمودي

عندما أحذف Parent, ، أريد أيضا حذف جميع المرتبطة Child أشياء. اذا هذا Child تتم الإشارة إلى الكائنات من قبل أي Other الفصول، أريد بهم ( Other أشياء) Child_Id المراجع لإلغاء الملذ.

ما قواعد تتالي أحتاجها على العلاقات؟

أيضا، سوف تحدد كيانات التحديث في الذاكرة وكذلك في قاعدة البيانات؟

أي إذا كان لدي مجموعة من Parent, Child و Other في الذاكرة (أي تحميلها من DB، وليس عابرا) وأخبر NH لحذف Parent, ، ماذا سيحدث؟ أفترض ذلك Parent و Child سوف تصبح الكائنات عابرة؟ ماذا سيحدث ل Child خاصية أي Other أشياء؟

تحرير: عند استخدام All-Delete-Orphan، ما هي كائن كائن مثل الأيتام؟ في المثال أعلاه، هو Child يتيم إذا كان والدها Parent يتم حذف؟ هل المرجع من Other المسألة عند النظر في كيان أثناء الزيت؟

شكرا

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

المحلول

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

من وجهة النظر هذه، يجب أن تصبح أسهل في فهمها.

cascade="delete" يعني أنه عندما يتم حذف الوالد، يتم حذف الطفل أيضا.cascade="delete-orphan" يعني، أنه بالإضافة إلى ذلك، يتم حذف الطفل إذا لم يشير أحد الوالدين إلى ذلك بعد الآن. هذا، بالطبع، يعمل فقط إذا كان الطفل في الجلسة.

مثيل المحذوف يحصل على الذاكرة. المراجع إلى المثيل العابر (من Other) سوف يسبب استثناء. AFAIK، تحتاج إلى إزالة الرجوع إلى المثيلات المحذوفة بنفسك. ربما يمكنك جعلها ضمنية من خلال بعض الحيل، لكنني أشك في أن هذا سيكون نظيفا. إنه منطق الأعمال.

لعلاقات الوالدين والطفل، cascade="all-delete-orphan" انه لائق.

للحصول على مرجع منتظم أنا أفضل cascade="none".

هناك تفسير كبير من قبل Ayende Rahien

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