Java App Engine DataStore: كيفية استعلام حقول الفئات الموروثة للكائنات؟

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

سؤال

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.

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