2011-01-01 19 views
1

私はいくつかのフィールドを持つデータクラスを持っています。新しいアイテムを追加する(新しい同期を行う)場合、PKと見なすURLです。アイテムを上書きする必要があります同じURLの場合はデータベース。しかし、私はまた、データベース内のすべてのオブジェクトのために増分されている "通常の"ロングIDが必要です。このIDは、PKとしてタグ付けしない限り、常にnullになります。自動インクリメントカラムi JDO、GAE

@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) 
private Long _id; 
@Persistent 
private String _title; 
@PrimaryKey 
@Persistent 
private String _url; 

/ヴィクトル

+0

URLがキーの場合は、なぜ長さも必要ですか? –

+0

ウェブページからオブジェクトをリクエストするときに、クエリ文字列に完全なURLを追加するのではなく、そのオブジェクトのIDだけを追加したいと思います。 – Viktor

答えて

3

これは動作します:あなたの鍵を取り込む_url

@PrimaryKey 
private String _url; 

@Persistent(valueStrategy = IdGeneratorStrategy.SEQUENCE) 
private Long _id; 

をし、あなたのオブジェクトを保存する際の設定を解除_idを残します。 _idは自動的に入力されますが、シーケンシャルIDであるかどうかはわかりません。

情報源:official Google AppEngine wiki

+0

私は_urlを "unencoded string"に設定しようとしましたが、エンコードされた文字列が必要なので、私の質問はエンコードされた文字列です。私は検索しようとしましたが、これについて何も見つかりませんでした。また、base64に文字列をエンコードしようとしましたが、それは助けにはなりませんでした。 – Viktor

+0

私は参照してください。エンコードされた文字列は 'Key'クラスの文字列表現であり、' KeyFactory'の 'keyToString()'と 'stringToKey()'メソッドを使って文字列に変換できますが、それはあなたが望むものではないと思います。 '@ PrimaryKey'アノテーションを指定するだけで、カスタム文字列キーを使用できるようです。私は自分の答えを修正して試してみる。 – rodion

+0

実際に私も同じ問題にぶつかりました。私が提供した答えはうまくいくようです。逐次インクリメントIDを取得するには、 'valueStrategy'を' SEQUENCE'に設定してください。 – rodion

関連する問題