Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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
Java 并发修改-JPA AppEngine_Java_Google App Engine_Jpa - Fatal编程技术网

Java 并发修改-JPA AppEngine

Java 并发修改-JPA AppEngine,java,google-app-engine,jpa,Java,Google App Engine,Jpa,我在我的谷歌应用程序引擎web应用程序中使用Java和JPA1。我在中遇到了这个问题,原因是:javax.transaction.xa.XAException:并发修改 Profile和ViewedProfile以及相应的getter和setter: public class Profile { ... @OneToOne(cascade={CascadeType.PERSIST, CascadeType.REMOVE}) private ViewedProfile vi

我在我的谷歌应用程序引擎web应用程序中使用Java和JPA1。我在
中遇到了这个问题,原因是:javax.transaction.xa.XAException:并发修改

Profile
ViewedProfile
以及相应的getter和setter:

public class Profile {
    ...
    @OneToOne(cascade={CascadeType.PERSIST, CascadeType.REMOVE})
    private ViewedProfile viewed = null;
    ...
}


public class ViewedProfile {
    ...
    private LinkedHashSet<String> viewedBy = null;
    private LinkedHashSet<String> profilesViewed = null;
    ...
}

我怀疑问题出在LinkedHashSet上,所以我在另一个项目中进行了尝试

public class Person {

    private LinkedHashSet<String> viewers = null;

    public LinkedHashSet<String> getViewers() {
        return viewers;
    }
    public void setViewers(LinkedHashSet<String> viewers) {
        this.viewers = viewers;
    }

}
公共类人物{
私有LinkedHashSet查看器=null;
公共LinkedHashSet GetViewer(){
返回观众;
}
公共无效集查看器(LinkedHashSet查看器){
this.viewers=观众;
}
}
然后对集合进行修改:

    Person p = new Person();
    LinkedHashSet<String> viewers = new LinkedHashSet<String>();
    viewers.add("one");
    viewers.add("two");
    viewers.add("three");
    viewers.add("four");
    p.setViewers(viewers);

    p.getViewers().remove(p.getViewers().iterator().next());
    p.getViewers().remove("two");
    p.getViewers().add("two");

    for (String s: p.getViewers()){
        System.out.println(s);
    }
Person p=新人();
LinkedHashSet查看器=新建LinkedHashSet();
观众。添加(“一”);
添加(“两个”);
添加(“三”);
观众。加上(“四”);
p、 设置查看器(查看器);
p、 getViewers().remove(p.getViewers().iterator().next());
p、 getViewers().删除(“两个”);
p、 getViewers()添加(“两个”);
for(字符串s:p.getViewers()){
系统输出打印项次;
}

但这一个有效。有什么帮助吗?谢谢

使用一些古老版本的GAE JPA插件不会有什么帮助,所以改用2.x版(已经存在了几年的版本)可能有影响现在更新为JPA2,但仍然遇到错误。但该异常跟踪未显示任何ConcurrentModificationException的源-查看GAE JPA插件的源,您将看到这一点。
public class Person {

    private LinkedHashSet<String> viewers = null;

    public LinkedHashSet<String> getViewers() {
        return viewers;
    }
    public void setViewers(LinkedHashSet<String> viewers) {
        this.viewers = viewers;
    }

}
    Person p = new Person();
    LinkedHashSet<String> viewers = new LinkedHashSet<String>();
    viewers.add("one");
    viewers.add("two");
    viewers.add("three");
    viewers.add("four");
    p.setViewers(viewers);

    p.getViewers().remove(p.getViewers().iterator().next());
    p.getViewers().remove("two");
    p.getViewers().add("two");

    for (String s: p.getViewers()){
        System.out.println(s);
    }