所有された1対多の関係を作成するとき、Javaで、低レベルのDatastoreAPIとDataNucleusJDOを使用することで結果のレコードに違いがあることに気づきました。これが意図的なものなのか、それとも修正する方法なのかわからない。
例えば、
次のリンクに従業員の住所が複数ある場合:
https://developers.google.com/appengine/docs/java/datastore/entities#Ancestor_Paths
次のように低レベルのデータストアAPIを使用すると、従業員レコードには住所列(つまりプロパティ)が表示されません。
Entity employee = new Entity("Employee");
datastore.put(employee);
Entity address_home = new Entity("Address", employee.getKey());
datastore.put(address_home);
Entity address_mailing = new Entity("Address", employee.getKey());
datastore.put(address_mailing);
JDOを使用すると、従業員レコードに住所列(つまりプロパティ)が表示されます。
@PersistenceCapable
public class Employee {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent(mappedBy = "employee")
private List<Address> addresses;
List<Address> getAddresses() {
return addresses;
}
void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
// ...
}
@PersistenceCapable
public class Address {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private Employee employee;
@Persistent
private String Street;
...
}
余分なプロパティは無害です。しかし、なぜこれがJDOに必要なのですか?
開発サーバー上のDataNucleusv2でGAE/J1.7.2を使用しています。