0

データストアに既存のエンティティがあります。属性クエリで管理コンソールを見つけることができます。

SELECT * FROM UserEntry where email = 'user@mail.com'

また、エンコードされたキー文字列でクエリを実行します。例:

SELECT * FROM UserEntry where __key__ = KEY('cy1hcHByIAsSCVVzZXJFbnRyeM')

ただし、エンコードされていないキーでエンティティをクエリすると、見つかりません。

SELECT * where __key__ = KEY('UserEntry','user@mail.com')

以前のクエリから、キーが正しいこと、および同じクエリが同じタイプの他のエンティティに対して機能することを確認できます。

JDO API 経由でエンティティにアクセスしようとすると、同じ動作が発生します。

pm.getObjectById(UserEntry.class, "user@mail.com");

このコードにより、次の例外が発生します。

javax.jdo.JDOObjectNotFoundException: Could not retrieve entity of kind UserEntry with key UserEntry("user@mail.com")

どうしてそうなった?この問題を解決し、今後回避するにはどうすればよいですか?

4

2 に答える 2

2

オフラインで、urlsafe キー文字列がユーザー名にスペースを追加してエンコードされているかのようにエンコードされていることを発見しましたKEY('UserEntry','user@mail.com ')。これは、プログラムの入力検証バグのようです。

于 2012-09-10T20:45:48.127 に答える
0

電子メール プロパティはエンティティの PK ですか? そうでない場合、クエリを実行しても意味がありません。電子メールを通常のプロパティとして最初のクエリを投稿すると、PK で繰り返されないと想定されるため、Key(type,email) でクエリを使用することはできません。

管理コンソールでエンティティを取得したら、キー プロパティをクリックして、電子メールがキーの一部であることを確認します。

于 2012-09-06T00:48:08.143 に答える