AppEngine 1.2.2. Ich definiere eine Klasse Produkt wie folgt:Java App Engine-Datenspeicher: Wie können Felder von geerbten Objektklassen abgefragt werden?
@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 eine abgeleitete Klasse Buch wie so definieren:
@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 wie so machen:
PersistenceManager pm = PMF.get() .getPersistenceManager(); pm.makePersistent (neues Buch ("George Orwell", "1984"));
ich für dieses neue Objekt abfragen kann eine Abfrage wie mit:
Abfrage query = pm.newQuery ("wählen Sie aus" + Book.class.getName() + "wo Autor == param"); query.declareParameters ("String param"); Listenergebnisse = (Liste) query.execute ("George Orwell");
Das gibt das Objekt zurück, weil ich ein Feld 'Autor' abfrage, das auf Book definiert ist.
Allerdings funktioniert das nicht:
Abfrage query = pm.newQuery ("wählen Sie aus" + Book.class.getName() + "wo Titel == param"); query.declareParameters ("String param"); Listenergebnisse = (Liste) query.execute ("1984");
Es löst eine Ausnahme aus, die besagt, dass es kein Feld 'title' gibt, selbst wenn dies für die abgeleitete Klasse Product 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 in den Datenspeicherabfragen nicht verfügbar sind.
Ist dies tatsächlich mit einer Variation der Syntax oder mit Anmerkungen möglich?