Google App Engine / JPA:使用Embeddable类的奇怪行为

时间:2012-08-22 22:39:21

标签: google-app-engine jpa google-cloud-datastore datanucleus

我有一个EmbaddableList<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

最后,这就是Embeddable类在其所有者(类Team)中的定义方式:

    @Embedded
    private EmbeddableClass ec;

    public EmbeddableClass getEc() {
        return ec;
    }

    public void setEc(EmbeddableClass ec) {
        this.ec = ec;
    }

我正在使用GAE SDK 1.7.0。

0 个答案:

没有答案