Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine GoogleAppEngine/JPA:使用可嵌入类的奇怪行为_Google App Engine_Jpa_Google Cloud Datastore_Datanucleus - Fatal编程技术网

Google app engine GoogleAppEngine/JPA:使用可嵌入类的奇怪行为

Google app engine GoogleAppEngine/JPA:使用可嵌入类的奇怪行为,google-app-engine,jpa,google-cloud-datastore,datanucleus,Google App Engine,Jpa,Google Cloud Datastore,Datanucleus,我有一个Embaddable类,它有一个列表,除非我也修改了另一个字段,否则不会保存其修改。请看一看,以了解: @Embeddable public class EmbeddableClass { private Integer someField; @Basic private List<String> someList; public EmbeddableClass() {} public Integer getSomeField(

我有一个
Embaddable
类,它有一个
列表
,除非我也修改了另一个字段,否则不会保存其修改。请看一看,以了解:

@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;
    }
}
该行必须带有
setSomeField
,否则在我第二次为给定用户运行测试时,“更改前大小”将为
0

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


我使用的是GAE SDK 1.7.0。

这能解决您的问题吗?不,我不能使用JPA 2.0(没有时间升级和测试所有内容),OP没有使用GAE,我没有收到任何异常。请尝试将您的收藏标记为脏的,我不确定GAE或Datanucleus,但JDOHelper有此功能。@JMelnik非常感谢<代码>JDOHelper.makeDirty(user.getMainTeam(),“ec”)使它工作!不过,这是一个bug,不是吗?如果是这样的话,我希望有人回答这个问题,否则我可以用这些信息接受你的回答。这是一个bug还是一个bug并不重要,因为正如你所说,你没有使用最新的版本(而且你还有一个解决方法)。事实上,您使用的是一个古老的版本(2009年初)。如果你使用当前版本发现问题,用测试用例演示,并在问题跟踪器中向谷歌报告,它就会变成一个bug;这就是他们想知道这些事情的方式。
        // ... 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...
    @Embedded
    private EmbeddableClass ec;

    public EmbeddableClass getEc() {
        return ec;
    }

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