3

エンティティ(「顧客」)の正確に1行を選択するための「キー」オブジェクトを作成する方法について少し混乱しています。

私のコード:

Query query = new Query("Customer");
// **** how do I have to create this key ???
Key key = KeyFactory.createKey("Customer", 1);
// ****
FilterPredicate keyFilter =  new FilterPredicate(Entity.KEY_RESERVED_PROPERTY,       FilterOperator.EQUAL, key);
query.setFilter(keyFilter);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
PreparedQuery pq = datastore.prepare(query);
Entity customer = pq.asSingleEntity();
if  (! (customer == null)) {
    log.info("OK !");
}
else {
    log.info("no customer found");
}

私の結果は常に「顧客が見つかりません」です。

データストアビューア(ローカルで作業しています)を使用すると、3つの行が表示されます。

  • id / name = 1 email = "your email" name = "your name"
  • id / name = 2 email = "your email" name = "your name"
  • id / name = 3 email = "your email" name = "your name"

id / name=1の顧客を選択したい。私が試した:KeyFactory.createKey( "Customer"、1); およびKeyFactory.createKey( "Customer"、 "your name");

しかし、成功しませんでした。

プログラムで「Customer」を検索(asList)して、表示されるキーの値を出力すると、次のようになります。

  • 行1キー=Customer( "your name")/ Customer(1)
  • 行2キー=Customer( "your name")/ Customer(2)
  • 行3キー=Customer( "your name")/ Customer(3)

キーの印刷可能な値は、「Entity(name)/ Entity(id / name)」の形式です。

コードでそのようなキー値を作成するにはどうすればよいですか?javadocで私が見るのは:

  • createKey( "kind"、id)
  • createKey( "kind"、 "name")

他のメソッドには祖先が必要です。祖先は作成していません...。これは、3行を作成するために実行したコードです(3回実行されました)。

Key customerKey = KeyFactory.createKey("Customer", "your name");
Entity customer = new Entity("Customer", customerKey);
customer.setProperty("name", "your name");
customer.setProperty("email", "your email");
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(customer);

前もって感謝します !

よろしく

マックス

つまり、「toString」が次の結果をもたらすキーを作成するにはどうすればよいでしょうか。

  • コード:log.info( "customer KeyFactory.keyToString =" + KeyFactory.keyToString(key));
  • 出力:INFO:customer KeyFactory.keyToString = Customer( "your name")/ Customer(1)
4

3 に答える 3

2

エンティティの作成が正しくありません。自分でキーを作成する必要はありません。種類とキー名または ID パラメーターを使用してエンティティを作成すると、種類とキー名または ID からキーが自動的に作成されます。

Entity customer = new Entity("Customer", "your name");
customer.setProperty("email", "your email");

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(customer);

必要なエンティティを作成するために必要なのはそれだけです。

種類とキーを指定すると、子エンティティが作成されます。したがって、ID 1 の顧客である「あなたの名前」を持つ顧客を作成しました。

キーを使用してエンティティを取得するには、同じパラメーターを使用してキーを作成するだけです。

Key key = KeyFactory.createKey("Customer", "your name");

get() を使用したいのですが、何をしたいのかわかりません。たとえば、顧客の電子メールを取得するには:

    Entity e;
    try {
        e = datastore.get(key);

        String myEmail= (String) e.getProperty("your email");
于 2014-05-08T11:47:46.587 に答える
1

キーがある場合は、 query() ではなく get() を使用したいと思います。

https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreService#get(com.google.appengine.api.datastore.Key)

于 2013-01-16T23:05:45.677 に答える
0

と呼ばれるJavaエンティティクラスがProductあり、そのキー、つまりIDを指定して一意のレコードを取得したいとします。

メソッドは次のようになります。

    public Product getProduct(Long id) {

        //Get Persistence Manager
        PersistenceManager pm = ...;

        Key k = KeyFactory.createKey(Product.class.getSimpleName(), id);
        Product product = null;
        try {
           product = pm.getObjectById(Product.class, k);
        } 
        finally {
           pm.close();
        }

    return product;
}

Productしたがって、あなたの例では、クラス名に置き換えることができると思います。あなたのクラス名はCustomer

于 2013-01-17T00:16:03.693 に答える