別のフィールドも変更しない限り、変更が保存されないEmbaddable
クラスがあります。List<String>
理解するためにこれを見てください:
@Embeddable
public class EmbeddableClass {
private Integer someField;
@Basic
private List<String> someList;
public EmbeddableClass() {}
public Integer getSomeField() {
return someField;
}
public void setSomeField(Integer someField) {
this.someField = someField;
}
public List<String> getSomeList() {
return someList;
}
public void setSomeList(List<String> someList) {
this.someList = someList;
}
}
を変更しないとInteger someField
、 の変更は保持されsomeList
ません。
これは私がテストするために使用するコードです:
// ... lookup entity user...
log.severe("some list size before changing: " + user.getMainTeam().getEc().getSomeList().size());
//user.getMainTeam().getEc().setSomeField(new Random().nextInt()); // <- PROBLEM HERE!
user.getMainTeam().getEc().getSomeList().add("darn");
// ... persist entity user...
その行setSomeField
が必要です。そうしないと、「変更前のサイズ」は0
、特定のユーザーに対して2回目のテストを実行することになります。
最後に、所有者 ( class Team
)で Embeddable クラスを定義する方法を次に示します。
@Embedded
private EmbeddableClass ec;
public EmbeddableClass getEc() {
return ec;
}
public void setEc(EmbeddableClass ec) {
this.ec = ec;
}
GAE SDK 1.7.0 を使用しています。