Java 如何在google应用程序引擎数据库中保存列表?

Java 如何在google应用程序引擎数据库中保存列表?,java,google-app-engine,google-cloud-datastore,jdo,Java,Google App Engine,Google Cloud Datastore,Jdo,我有以下代码不能正常工作。 testprovincia存在于数据库中,partidos变量是一个列表,我确信它不是空的,但也永远不会持久化 mgr = getPersistenceManager(); Query query = mgr.newQuery(Provincia.class); query.setFilter("name == nameParam"); query.declareParameters("String nameParam"); List<Provincia>

我有以下代码不能正常工作。 testprovincia存在于数据库中,partidos变量是一个列表,我确信它不是空的,但也永远不会持久化

mgr = getPersistenceManager();
Query query = mgr.newQuery(Provincia.class);
query.setFilter("name == nameParam");
query.declareParameters("String nameParam");
List<Provincia> results = (List<Provincia>) query.execute("testprovincia");
Provincia prov = results.get(0);

insertPartidos(partidos);

prov.setPartidos(partidos);
mgr.makePersistent(prov);
query.closeAll();
mgr.close();
mgr=getPersistenceManager();
Query Query=mgr.newQuery(Provincia.class);
setFilter(“name==nameParam”);
declareParameters(“字符串名称参数”);
List results=(List)query.execute(“testprovincia”);
Provincia prov=结果。获取(0);
插入partidos(partidos);
prov.setPartidos(partidos);
经理(prov);
query.closeAll();
经理关闭();
InsertPartidos方法:

private void insertPartidos(List<Partido> partidos){
    for (Partido partido : partidos) {
        log.info(partido.getName());
        mgr.makePersistent(partido);
    }
}
private void insertPartidos(列出partidos){
for(Partido Partido:partidos){
log.info(partido.getName());
经理(partido);
}
}
问题是为什么我从未在数据库中看到添加到prov变量的列表?都是空的

以下是我的课程:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Provincia {

    public Provincia(String name) {
        super();
        this.name = name;
    }

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;
    @Persistent
    private String name;
    @Persistent(mappedBy = "provincia")
    @Order(extensions = @Extension(vendorName="datanucleus",key="list-ordering", value="name asc"))
    private List<Partido> partidos;

    public Key getId() {
        return id;
    }
    public void setId(Key id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Partido> getPartidos() {
        return partidos;
    }
    public void setPartidos(List<Partido> partidos) {
        this.partidos = partidos;
    }
}

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Partido {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;
    @Persistent
    private String name;

    @Persistent
    private Provincia  provincia;

    public Partido(){
    }

    public Partido(Key id) {
        super();
        this.id = id;
    }

    public Partido(Key id, String name, Provincia prov) {
        super();
        this.id = id;
        this.name = name;
        this.provincia = prov;
    }

    public Partido(String name, Provincia prov) {
        super();
        this.name = name;
        this.provincia = prov;
    }

    public Key getId() {
        return id;
    }

    public void setId(Key id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Provincia getProvincia() {
        return provincia;
    }

    public void setProvincia(Provincia provincia) {
        this.provincia = provincia;
    }

}
@PersistenceCapable(identityType=identityType.APPLICATION)
公共级省级{
公共省(字符串名称){
超级();
this.name=名称;
}
@主键
@持久性(valueStrategy=IdGeneratorStrategy.IDENTITY)
私钥id;
@持久的
私有字符串名称;
@持久性(mappedBy=“provincia”)
@订单(extensions=@Extension(vendorName=“datanucleus”,key=“list ordering”,value=“name asc”))
私人名单当事人;
公钥getId(){
返回id;
}
公共无效设置id(密钥id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共列表getPartidos(){
返回partidos;
}
公共void setPartidos(列出partidos){
this.partidos=partidos;
}
}
@PersistenceCapable(identityType=identityType.APPLICATION)
公开课派对{
@主键
@持久性(valueStrategy=IdGeneratorStrategy.IDENTITY)
私钥id;
@持久的
私有字符串名称;
@持久的
私人省;
公共党派(){
}
公共部分(密钥id){
超级();
this.id=id;
}
公共部分(密钥id、字符串名称、Provincia prov){
超级();
this.id=id;
this.name=名称;
this.provincia=prov;
}
公共Partido(字符串名称,Provincia prov){
超级();
this.name=名称;
this.provincia=prov;
}
公钥getId(){
返回id;
}
公共无效设置id(密钥id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共省getProvincia(){
返回省;
}
公共无效setProvincia(Provincia Provincia){
this.provincia=provincia;
}
}

可能使用另一种更新方式。如果testprovincia已经存在,那么使用所描述的方法可能会帮到您。不要使用makepersistent,而是使用持久性管理器获取数据并直接更新它


还是使用标准数据存储的db(或ndb)puts,如前所述?您真的需要JDO吗?

我添加了更多信息,可能是因为使用相同mgr变量来持久化的previus插入有问题。我像你描述的那样更改代码,但我遇到了同样的情况。你没有使用正确的方法。我说的是,他们不使用makePersistent,而是使用持久性管理器按ID抓取对象,然后只更新对象。我提供的第一个链接,您将看到的第一段代码;我无法检索实体,出现了trowedNo异常,但我再次更改了代码以将名称转换为键,但您不能将字符串作为键并在类中包含子对象,同时,您会得到一个异常。所以我将返回旧代码,这里我必须问,因为我疯了,我必须首先从查询中加载省,然后用您指向我的代码再次加载相同的省?最后,试着用列表更新省…如果你没有省,这是你的关键,是的,这可能是一种方法。。。这听起来确实有点循环,但这是为了让你尝试另一种PM方法。