エンティティの作成、取得、更新、削除

Datastore のデータ オブジェクトはエンティティと呼ばれ、個々のエンティティはクエリの目的で特定の種類に分類されます。たとえば、人事アプリケーションを作成する場合、各従業員を Employee という種類のエンティティで表すことができます。エンティティ データ値は、プロパティの形で表されます。エンティティの詳細については、エンティティ、プロパティ、キーを参照してください。

エンティティの作成とプロパティの設定

Java で新しいエンティティを作成するには、そのエンティティの種類を Entity() コンストラクタの引数として指定して、Entity クラスのインスタンスを作成します。必要に応じてエンティティのプロパティを入力してから、そのエンティティを DatastoreService.put() メソッドの引数として渡してデータストアに保存します。エンティティのキー名を指定するには、コンストラクタの 2 番目の引数として渡します。

次の例では、種類が Employee のエンティティを作成し、そのプロパティ値を設定してデータストアに保存します。

Entity employee = new Entity("Employee", "asalieri");
employee.setProperty("firstName", "Antonio");
employee.setProperty("lastName", "Salieri");
employee.setProperty("hireDate", new Date());
employee.setProperty("attendedHrTraining", true);

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

キー名を指定しない場合は、Datastore によって自動的にエンティティのキーとして数値 ID が生成されます。

Entity employee = new Entity("Employee");
// Set the entity properties.
// ...
datastore.put(employee);

エンティティの取得

指定したキーで識別されるエンティティを取得するには、Key オブジェクトを DatastoreService.get() メソッドに渡します。

// Key employeeKey = ...;
Entity employee = datastore.get(employeeKey);

エンティティの更新

既存のエンティティを更新するには、Entity オブジェクトの属性を変更してから、それを DatastoreService.put() メソッドに渡します。そのオブジェクト データで既存のエンティティが上書きされます。put() を呼び出すたびに、オブジェクト全体が Datastore に送信されます。

Entity employee = new Entity("Employee", "asalieri");
employee.setProperty("firstName", "Antonio");
employee.setProperty("lastName", "Salieri");
employee.setProperty("hireDate", new Date());
employee.setProperty("attendedHrTraining", true);

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

エンティティの削除

エンティティを削除するには、エンティティのキーを指定して、DatastoreService.delete() メソッドを実行します。

// Key employeeKey = ...;
datastore.delete(employeeKey);

エンティティの一括削除

多数のエンティティを削除する必要がある場合は、Dataflow を使用してエンティティを一括削除することをおすすめします。

バッチ オペレーションの使用

1 回の Datastore 呼び出しで複数のエンティティを操作したい場合は、一括処理を使用できます。

バッチ呼び出しの例を次に示します。

Entity employee1 = new Entity("Employee");
Entity employee2 = new Entity("Employee");
Entity employee3 = new Entity("Employee");
// ...

List<Entity> employees = Arrays.asList(employee1, employee2, employee3);
datastore.put(employees);

このバッチ オペレーションでは、すべてのエンティティまたはキーがエンティティ グループごとにグループ化され、エンティティ グループごとにリクエストされた処理が並列に行われます。この処理では、サービス呼び出しの 1 回分のオーバーヘッドしか発生しないため、エンティティごとに個別の呼び出しを行うよりも高速になります。バッチ オペレーションで複数のエンティティ グループを対象とする場合は、サーバー側で各エンティティ グループの処理が並列に行われます。

put() または delete() の一括呼び出しは、エンティティによって成功する場合と失敗する場合があります。呼び出しが完全に成功するか完全に失敗することが重要な場合は、トランザクションを使用することと、処理対象のすべてのエンティティが同じエンティティ グループに存在することが必要です。