2011-10-21 11 views
4

私は親と子のオブジェクト(1対多)がある場所でデータモデルを設計しました。最初に私はすべての仕事を手動で行い、関係を保つために子供のオブジェクトに親のIDを格納しました。それから、私はアプリエンジンのドキュメントとの関係を使用することに決めました。今私はID 21の親とID 1の子を持っています(この子はこの親の唯一の子であるため、IDは1とします)。 child.getKey()GAEで子オブジェクトを取得しようとするとJDOObjectNotFoundExceptionが発生する

そして私は、オブジェクトを取得しようとしています、同じ文字列を持つ:

子子= pm.getObjectById(Child.class、キー今、私はとキーを取得しようとしています);

どういうわけか、私はこのエラーを取得する: WARNING:/admin.jsp javax.jdo.JDOObjectNotFoundException:キーチャイルド( "親(21)/子供(1)")との種類の子供のエンティティを取得できませんでした

私はこの子供がこの親に存在することを知っています。多分誰かが私を助けることができる?私はこれについて研究して何も現れませんでした...

+0

をあなたは 'Child'はの子であることをどのように示しています「親」? –

+0

ドキュメンテーションが述べているように、私はeveythingをしましたが、最終的には解決策が見つかりました。 – Genom

答えて

4

私はすべての可能性を試して数時間後に解決策を見つけました。この問題を解決するには2つの方法があります。まず、キーを持つ子オブジェクトを取得する場合は、キーが文字列でないことを確認してください。キー(com.google.appengine.api.datastore.Key)にする必要があります。あなたは2種類の方法で、このキーを取得することができます:

Key key = new KeyFactory 
    .Builder(Parent.class.getSimpleName(), ParentID) 
    .addChild(Child.class.getSimpleName(), ChildID).getKey(); 

または

Key key = KeyFactory.stringToKey(keyString); //you can obtain keyString with KeyFactory.keyToString(ChildObject.getKey()); 

次に、あなたが簡単に使用することができます。

Child child = pm.getObjectById(Child.class, key); 
+0

ありがとうございました。魅力のように動作します。悲しいことに、GAEの文書ではかなり適切に説明されていません。私の貴重な時間を大いに節約しました – user1302884

+0

事前に感謝!!!!!! – Mojiiz

関連する問題