1

別のフィールドも変更しない限り、変更が保存されない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 を使用しています。

4

0 に答える 0