AppEngine 1.2.2. Я определяю класс Product следующим образом:
@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;
}
Я определяю производный класс Book следующим образом:
@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 (). GetPersistenceManager ();
pm.makePersistent (новая книга («Джордж Оруэлл», «1984»));
Я могу запросить этот новый объект, используя запрос вроде:
Query query = pm.newQuery («выбрать из» + Book.class.getName () + «где автор == param»);
query.declareParameters ("String param");
Список результатов = (Список) query.execute ("Джордж Оруэлл");
Это возвращает объект, потому что я запрашиваю поле 'author', определенное в Book.
Однако это не работает:
Query query = pm.newQuery («выбрать из» + Book.class.getName () + «где title == param»);
query.declareParameters ("String param");
Список результатов = (Список) query.execute ("1984");
Выдает исключение, в котором говорится, что нет поля 'title', даже если оно определено в производном классе Product.
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
Похоже, что поля из унаследованных классов недоступны в запросах хранилища данных.
Возможно ли это на самом деле с изменением синтаксиса или с аннотациями?