احذف كيان عن طريق المفتاح دون جلبه أولا في محرك التطبيق (باستخدام JDO)

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

سؤال

هل هناك طريقة لحذف كيان دون الحاجة إلى جلبها من Datastore أولا؟ أفترض أن لدي بالفعل مفتاح أو معرف للكيان. أنا أفكر في شيء مثل deleteObjectById سيكون ذلك التناظرية getObjectById على PersistenceManager.

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

شكرا

تحرير: أعرف كيفية القيام بذلك باستخدام API المستوى المنخفض، وكذلك في Python API. كنت أتساءل عما إذا كانت هناك طريقة للقيام بذلك داخل طبقة JDD.

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

المحلول

أجاب Datanucleus على سؤالي على مجموعة جوجل:

ليس صحيحا. المشكلة هي أن الكائن يمكن أن يكون له علاقات وهكذا، نظرا لأن هذه يمكن أن تسبب تجميل العمليات، عادة ما يجب تحميلها في الذاكرة أولا. كان الوضع الوحيد الذي لن يحتاج إليه في الذاكرة إذا كان فئة الكائن المراد حذف أي علاقات.

عند الذهاب إلى API المستوى المنخفض وتفجير الأشياء التي قد يكون لها أو قد لا يكون لها تأثير على الكائنات ذات الصلة ... ربما شخص مسؤول عن أنه قد يعلق على ذلك.

نصائح أخرى

لست متأكدا من JDO، ولكن بالنسبة لبيتثون، هذا ممكن مع اختراق صغير. تحتاج إلى "إنشاء" مثيل جديد بنفس المفتاح ثم حذفه. سوف تصل قاعدة البيانات مرة واحدة فقط.

instance = Model(key=key_to_delete, required_property='dummy')
instance.delete()

ماذا عن استخدام واجهة برمجة تطبيقات منخفضة المستوى?

أظن DataService.delete(Key) سوف تفعل بالضبط ما تحتاجه.

إذا كنت تستخدم مفتاح طويل، فستحصل على استخدام KeyMaker لإنشاء مفتاح أولا.

Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top