2009-08-02 11 views
0

私は、所有されている1対多の関係で2つのクラスを持っています。親はMapで、子はPOI(関心地点)です。 POIを既存のMapに追加しようとしていますが、変更を維持しようとすると例外が発生します。 "(POI)を追加map.getPois();"App Engineで親オブジェクトに子オブジェクトを追加するにはどうすればよいですか?

PersistenceManager pm = PMF.get().getPersistenceManager(); 

// create a new POI 
Poi poi = new Poi(); 

// find the Map by its ID 
Map map = pm.getObjectById(Map.class, Long.decode(mapId)); 

// add the POI to the map 
map.getPois().add(poi); 

// persist! 
pm.makePersistent(map); 
pm.close(); 

ライン:

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class Map { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 

    @Persistent(mappedBy = "map") 
    private List<Poi> pois; 

    public List<Poi> getPois() { 
     return pois; 
    } 
} 

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class Poi { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key id; 

    @Persistent 
    private Map map; 

    public Map getMap() { 
     return map; 
    } 
    public void setMap(Map map) { 
     this.map = map; 
    } 
} 

そして、ここでは、私はそれらを使用しようとしています方法です。ここでは、2つのクラスであります「java.lang.ClassCastException:java.lang.Long」という例外をスローしますが、なぜそれを伝えません。私がそれを "poi.SetMap(map);"それはただ静かに失敗します。エラーメッセージはなく、何も起こりません。

App Engineで1対多の関係を正しく処理する方法を知っている人はいますか?誰も良い資源を知っていますか? Google's documentationは少し役に立っていますが、本当に欠けています。

答えて

0

最初に確認するのは、バージョン1.2.2のsdkを使用していることです。このreleaseでは、子/親機能に多くの修正/強化が加えられました。 issueが修正されたものの1つは、問題とよく似ています。

これで問題が解決しない場合は、上記のコードを使用しているクラスに@PersistenceAwareというアノテーションが付けられていることを確認してください(@PersistenceCapableではないと仮定します)。

は、あなたが問題を引き起こしている完全なクラスを投稿することができ、問題が解決しない場合は、我々ドン例えば、あなたの抜粋で(好ましくは例外を再現するコードの最低限に削減します)元の地図が作成されて保存されているのを見て、mapIdがどこから来ているのか分かりません。

+0

SDKの最新バージョンへのアップデートは完全に機能しました!ちょうど数週間前から私は1.2.1にいました。それは私を永遠に理解してくれたでしょう。 – dnorcott

0

あなたのマップがここでは最高の抽象であるかどうかはわかりません。そして私はポイが何であるか知らない。 Googleはそれがハワイ料理だと教えてくれる。

しかしGoogleではまた、how to do a one-to-many unidirectional relationshipとJDOを表示しています。私はあなたのコード内に1対多数の注釈を見ません。それはあなたがやろうとしていることですか?もしそうなら、それはおそらくあなたが欠けているものです。

+0

POI =ポストの第2文で定義されているような興味のある点:) –

+0

また、ポスターはJPAではなくJDOを使用していますが、類似していますが同じではありません。 –

+0

私はそれを打ちたい:PointOfInterestは、そのPOIをより自己文書化している。 – duffymo