次に、ContactInfo データ クラスと Employee データ クラスで、Employee から ContactInfo への 1 対 1 の関係を定義する方法を示します。
ContactInfo.java
import com.google.appengine.api.datastore.Key;
// ... imports ...
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class ContactInfo {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String streetAddress;
// ...
}
Employee.java
import ContactInfo;
// ... imports ...
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Employee {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private ContactInfo contactInfo;ContactInfo getContactInfo() {
return contactInfo;
}
void setContactInfo(ContactInfo contactInfo) {
this.contactInfo = contactInfo;
}
// ...
}
永続オブジェクトは、データストア内の異なる 2 つの種類の別個のエンティティです。関係は、エンティティ グループ関係を使用して表されます。つまり、子のキーはエンティティ グループの親として親のキーを使用します。アプリケーションが親オブジェクトのフィールドを使用して子オブジェクトにアクセスすると、JDO 実装がエンティティ グループの親へのクエリを実行して子を取得します。
子のクラスには、親キーの情報を保存できるタイプのキー フィールド(キーや文字列として表されたキー値など)が必要です。
両方のクラスのフィールドを使用し、双方向の 1 対 1 関係を作成できます。子クラスのフィールドのアノテーションで、このフィールドが双方向の関係を示していることを宣言します。子クラスのフィールドには、@Persistentアノテーションと引数mappedBy = "..."を指定する必要があります。値は、親クラスのフィールド名となります。1 つのオブジェクトのフィールドに値が設定されると、もう一方のオブジェクトの対応する参照フィールドも自動的に値が設定されます。
ContactInfo.java
import Employee;
// ...
@Persistent(mappedBy = "contactInfo")
private Employee employee;
子オブジェクトは、最初にアクセスされたときにデータストアから読み込まれます。親オブジェクトで子オブジェクトにアクセスしない場合、子オブジェクトのエンティティは読み込まれません(データストア インターフェースは、子オブジェクトの「積極的な」読み込みはサポートしていません。データストアはクエリの結合はサポートしていないため、積極的な読み込みを実装しても、アプリケーションからデータストアへのコール数を減らすことはできません)。
参照元:
http://code.google.com/intl/ja/appengine/docs/java/datastore/relationships.html
0 件のコメント:
コメントを投稿