3

私はgetKey()この種のエンティティを扱う必要があります:

@Entity
public class Value {
    @Id
    private long id;
    private byte[] value;

    com.googlecode.objectify.Key<Value> getKey() {
        return com.googlecode.objectify.Key.create(Value.class, id); // When executed this line throws NullPointerException
    }

        // Code omitted
}

ただし、以前バージョン3で使用したパターンは、もう適用できないようです。は@Transientに置き換えられます@Ignoreが、getKey()関数に注釈を付けると、次の@Ignoreエラーが発生します。

The annotation `@Ignore` is disallowed for this location 

だから私はそれをコメントアウトしました。そして、それが機能するかどうかを確認します。

さらに、

アプリケーションを実行すると、上記のコメントのようにgetKey()関数がスローされます。NullPointerException

@Entityでは、キーを取得するためのパターンは何ですか?

4

2 に答える 2

2

nullまたは0のIDでキーを作成することはできません。Objectifyもデータストアもそれを許可しません。

エンティティからキーを作成する場合は、最初に有効なIDを持っていることを確認してください。

于 2012-10-11T21:13:55.290 に答える
0

アノテーション@Ignoreは、これらのフィールドがデータストアに格納されないことを宣言するために、エンティティのフィールドのみを対象としています。getKey()はメソッドであるため、@Ignoreアノテーションを使用しないでください。

@Ignoreアノテーションの詳細については、http://objectify-appengine.googlecode.com/git/javadoc/index.htmlをご覧ください

お役に立てれば!

アップデート:

NPEの場合、何が問題なのかよくわかりません。メソッドをこれに置き換えてみて、機能するかどうかを確認できます。

com.googlecode.objectify.Key<Value> getKey() {
    return new com.googlecode.objectify.Key<Value>(Value.class, id); 
}
于 2012-10-11T05:52:25.990 に答える