Frage

App Engine 1.2.2. Ich definiere eine Klasse Produkt wie folgt:

@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;
}

Ich definiere eine abgeleitete Klasse Buch wie folgt:

@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;
}

ich dann ein neues Objekt machen etwa so:

PersistenceManager pm = PMF.get () getPersistenceManager ().  pm.makePersistent (neues Buch ( "George Orwell", "1984"));

Ich kann für dieses neue Objekt abfragen, um eine Abfrage wie mit:

Abfrage query = pm.newQuery ( "wählen Sie aus" + Book.class.getName () + "wo Autor == param");  query.declareParameters ( "String param");  Listenergebnisse = (List) query.execute ( "George Orwell");

Das gibt das Objekt, weil ich ein Feld ‚Autor‘ auf Buch definiert bin abfragt.

Allerdings funktioniert das nicht:

Abfrage query = pm.newQuery ( "wählen Sie aus" + Book.class.getName () + "wo Titel == param");  query.declareParameters ( "String param");  Listenergebnisse = (List) query.execute ( "1984");

Es gibt eine Ausnahme aus, die dort heißt es ist kein Feld ‚Titel‘, auch durch diese auf der abgeleiteten Klasse Produkt definiert ist.

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

Es scheint, als ob Felder aus geerbten Klassen nicht in den Datenspeicher-Abfragen zur Verfügung stehen.

Ist dies in der Tat möglich, mit einer Variation der Syntax oder mit Anmerkungen?

War es hilfreich?

Lösung

aus: http://code.google.com/appengine /docs/java/datastore/usingjdo.html

Nicht unterstützte Funktionen von JDO

Die folgenden Merkmale der JDO-Schnittstelle werden nicht von der App Engine-Implementierung unterstützt:

Unowned Beziehungen. Sie können nicht im Besitz befindlichen Beziehungen mit expliziten Schlüsselwerte umzusetzen. JDO Syntax für unowned Beziehungen kann in einer zukünftigen Version unterstützt werden. Owned many-to-many-Beziehungen.

"Join" Abfragen. Sie können ein Feld eines Kindes Einheit in einem Filter verwenden, wenn eine Abfrage auf der übergeordneten Art durchführen. Beachten Sie, dass Sie die Eltern Beziehungsfeld direkt in Abfrage mit einem Schlüssel testen können.

JDOQL Gruppierung und andere Aggregatabfragen.

polymorphe Abfragen. Sie können keine Abfrage einer Klasse erhalten Instanzen einer Unterklasse durchführen. Jede Klasse wird durch eine separate Einheit Art im Datenspeicher dargestellt.

IdentityType.DATASTORE für die @PersistenceCapable Anmerkung. Nur IdentityType.APPLICATION unterstützt wird.

Es gibt derzeit einen Fehler verhindert persistente Felder auf Super verhindert auf den Datenspeicher gespeichert werden. Dies wird in einer zukünftigen Version behoben werden.

Andere Tipps

Diese Abfrage unter Verwendung von Datanucleus mit einer der anderen Datenspeichern wir (z RDBMS, XML, Excel, usw.) unterstützen, sollte in der Tat Felder in Oberklassen ermöglichen; die Abfrage gültig ist JDOQL. Wenn sie in GAE nicht funktionieren / J dann melden Sie das Problem in der Google-issue tracker, obwohl es dort sicherlich ein Thema, über die Vererbung ist bereits http://code.google.com/p/datanucleus-appengine/issues/ Liste

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top