简体   繁体   English

如何在Google-app-engine数据库中保存列表?

[英]How can I save a list in google-app-engine database?

I have the following code that is not working properly. 我有以下代码无法正常工作。 testprovincia exist on data base and the partidos variable is a list that I am sure is not empty but is never persisted too. 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();

InsertPartidos method: InsertPartidos方法:

private void insertPartidos(List<Partido> partidos){
    for (Partido partido : partidos) {
        log.info(partido.getName());
        mgr.makePersistent(partido);
    }
}

The question is why I never see the list I added to prov variable on the database? 问题是为什么我永远都看不到我添加到prov变量的列表? Is allways empty. 一直都是空的。

Here are my classes: 这是我的课程:

@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;
    }

}

Maybe using the other way of updating. 也许使用其他更新方式。 If testprovincia already exists, using the method described here might do the trick for you. 如果已经存在testprovincia,则使用此处描述的方法可以为您解决问题。 Instead of using makepersistent, grab your data with the persistence manager and straight update it. 与其使用makepersistent,不如使用持久性管理器获取数据并直接对其进行更新。

That or use standard datastore's db (or ndb) puts, as explained here ? 这也可以使用标准的数据存储的数据库(或NDB)看跌期权,作为解释在这里 Do you REALLY need the JDO? 您真的需要JDO吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM