Java App Engine DataStore: كيفية استعلام حقول الفئات الموروثة للكائنات؟
-
12-09-2019 - |
سؤال
Appengine 1.2.2. أعرف منتج فئة مثل ذلك:
@PersistenceCapable(identityType = IdentityType.APPLICATION, table="Products")
public class Product {
public Product(String title) {
super();
this.title = title;
}
public String getTitle() {
return title;
}
@Persistent
String title;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
}
أعرف كتاب فئة مشتقة مثل ذلك:
@PersistenceCapable(identityType = IdentityType.APPLICATION, table="Products")
public class Book extends Product {
public Book(String author, String title) {
super(title);
this.author = author;
}
public String getAuthor() {
return author;
}
@Persistent
String author;
}
ثم اجعل كائن جديد مثل ذلك:
persistencemanager PM = PMF.Get (). GetPersistEcmanager ()؛ pm.makepersistent (كتاب جديد ("جورج أورويل"، "1984"))؛
يمكنني الاستعلام عن هذا الكائن الجديد باستخدام استعلام مثل:
Query Query = PM.NewQuery ("اختر من" + book.class.getname () + "حيث المؤلف == Param")؛ استعلام. قائمة النتائج = (قائمة) الاستعلام. execute ("جورج أورويل")؛
يؤدي هذا إلى إرجاع الكائن، لأنني استعلام عن مؤلف "مؤلف" محدد في الكتاب.
لكن هذا لا يعمل:
Query Query = PM.NewQuery ("اختر من" + book.class.getname () + "حيث العنوان == Param")؛ استعلام. قائمة النتائج = (قائمة) الاستعلام. execute ("1984")؛
يلقي استثناء ينص ينص أنه لا يوجد عنوان "ملخص"، حتى من خلال ذلك يتم تعريفه على منتج الطبقة المشتقة.
javax.jdo.JDOUserException: Field "title" does not exist in com.example.Book or is not persistent
NestedThrowables:
org.datanucleus.store.exceptions.NoSuchPersistentFieldException: Field "title" does not exist in com.example.Book or is not persistent
يبدو كما لو أن الحقول من الفصول الموروثة غير متوفرة في استعلامات DataStore.
هل هذا في الحقيقة ممكنة باختلاف في بناء الجملة، أو مع التعليقات التوضيحية؟
المحلول
من: http://code.google.com/appengine/docs/java/datastore/usingjdo.html.
ميزات غير مدعومة من jdo
لا يتم دعم ميزات واجهة JDD التالية من خلال تطبيق محرك التطبيق:
علاقات غير مصلحة. يمكنك تنفيذ العلاقات غير المغلقة باستخدام القيم الرئيسية الصريحة. يمكن دعم بناء جملة JDO للعلاقات غير المغلقة في إصدار مستقبل. تملك علاقات متعددة إلى كثير.
"الانضمام" الاستعلامات. لا يمكنك استخدام حقل للكيان الطفل في مرشح عند تنفيذ استعلام على النوع الرئيسي. لاحظ أنه يمكنك اختبار حقل العلاقة الأصلية مباشرة في الاستعلام باستخدام مفتاح.
مجموعة مجددة وغيرها من الاستفسارات الإجمالية.
استعلامات متعددة الأشكال. لا يمكنك إجراء استعلام لفئة للحصول على مثيلات من الفئة الفرعية. يتم تمثيل كل فئة من قبل كيان منفصل في مؤخرة البيانات.
IdeDityType.datastore للحصول على التشريح @ الأعراق. reditityype.Application فقط هو مدعوم.
يوجد حاليا علة تمنع منع الحقول المستمرة على الفائقة من الحفظ من DataStore. سيتم إصلاح هذا في إصدار مستقبلي.
نصائح أخرى
هذا الاستعلام، باستخدام DataNucleus مع أي من Datastores، نحن نؤيد (مثل RDBMS، XML، Excel، إلخ)، يجب أن يسمح بالفعل بالحقول في الفائقة؛ الاستعلام هو صالح jdoql صالح. إذا لم يعملوا في GAE / J، فقم بالإبلاغ عن المشكلة في تعقب Google Stracker، على الرغم من وجود مشكلة هناك بالتأكيد حول الميراث بالفعلhttp://code.google.com/p/datanucleus-appengine/issues/list.