JavaアプリエンジンDatastore:どのようにクエリ分野のオブジェクトの継承します。
-
12-09-2019 - |
質問
AppEngine1.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().getPersistenceManager();時までです。makePersistent(新書"George Orwell","1984年"));
できるクエリはこの新しいオブジェクトをクエリーのように:
エクエ=時までです。newQuery(選択"から"+ます。クラスです。getName()+"がauthor==param");を返します。declareParameters("文字列"param");リスト結果=(リスト)を返します。execute("ジョージ*オーウェル");
このオブジェクトを返しますが、私は疑問に取り組む分野'author'で定義します。
しかしこれは当てはまりませんの仕事:
エクエ=時までです。newQuery(選択"から"+ます。クラスです。getName()+"をタイトル==param");を返します。declareParameters("文字列"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
以下の機能のJDOインタフェースによってサポートされておらずアプリエンジンの実装:
Unowned。実践できるunownedとの関係を明示的にキー値です。JDOの構文unowned関係のバージョンでサポートされます。有多対多関係。
"に加入します。を使用することはできませんの専門メーカーとして、子ども主体にフィルターがクエリーの親会社です。お試すことができ、親との関係の分野に直接クエリを使用します。
JDOQL分類およびその他の集ます。
多型ます。実行できませんのクエリのクラスをインスタンスのサブクラス.各クラスに代表される独立した企業のdatastore.
IdentityType.DATASTOREの@PersistenceCapableのアノテーションを期待でみIdentityType.申請に対応しています。
現在のバグ防止防止持続フィールドにはスーパークラスから保存されdatastore.この固定は将来のリリース。
他のヒント
そのクエリは、私たちがサポートする他のデータストアのいずれかで(例えばRDBMS、XML、エクセル等)DataNucleusのを使用して、実際にスーパークラスのフィールドを許可する必要があります。クエリは有効なJDOQLです。彼らはGAE / Jで動作しない場合は、問題がすでに継承についてが確かにありますが、その後、Googleの問題追跡に問題を報告 http://code.google.com/p/datanucleus-appengine/issues/リストの