2

私はappEngineを初めて使用し、プロジェクトに必要な簡単なことを試しています。単純なJDOクラスのImageを作成します。

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

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

@Persistent
private Blob image;

@Persistent
private String type;

@Persistent
private String description;

public Key getKey() {
    return key;
}

public void setKey(Key key) {
    this.key = key;
}

public Blob getImage() {
    return image;
}

public void setImage(URL url) throws IOException {

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                url.openStream()));

        String line;
        StringBuffer stbf = new StringBuffer();

        while ((line = reader.readLine()) != null) {
            stbf.append(line);
        }
        image = new Blob(stbf.toString().getBytes());
        reader.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

エンドポイントが正常に作成され、AppEngineに配信されました。google-api-explorerhttps ://developers.google.com/apis-explorer/?base= https: //my-application.appspot.com/_ah/api#s/を介して単純なオブジェクトをデータストアに挿入しようとすると、idとappIDパラメータを使用して画像とキーにリンクするだけで、次のエラーが発生します。

503 Service Unavailable

- Show headers -

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "backendError",
    "message": "java.lang.NullPointerException"
   }
  ],
  "code": 503,
  "message": "java.lang.NullPointerException"
 }
}

キーをLong型からbyに変更すると、クエリが正しく実行され、データストアに新しいエンティティが表示されます。

それに加えて、ドキュメンテーションでは、「エンコードされたキーフィールドがnullの場合、オブジェクトが保存されるときにフィールドにシステム生成キーが入力されます」と述べています。しかし、それは鍵なしでは受け入れられないようですか?

誰かがこの問題で私を助けることができますか?

4

2 に答える 2

6

生成されたメソッドcontainsImageを見てください:

標準で生成されたコードは、getKey()がnullを返すかどうかをチェックしません。次のようなものを含める必要があります。

if (image.getKey() == null) {
            return false;
}

getObjectByIdを実行する前。

于 2013-03-25T22:42:05.697 に答える
0

私はしばらくの間これを修正しようとしてきました。提案された答えは正しいです。メモを追加しようと思いました。これはGAESDKまたはEclipseプラグインでは修正されていません。つまり、nullキーはまだチェックされていません。ヒントをありがとう!申し訳ありませんが、コメントを追加できませんでした。理由はわかりません。

于 2013-04-30T06:29:47.757 に答える