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

时间:2014-08-11 18:58:47

标签: 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> results = (List<Provincia>) query.execute("testprovincia");
Provincia prov = results.get(0);

insertPartidos(partidos);

prov.setPartidos(partidos);
mgr.makePersistent(prov);
query.closeAll();
mgr.close();

InsertPartidos方法:

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

问题是为什么我从来没有看到我在数据库中添加的变量列表?总是空的。

以下是我的课程:

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

}

1 个答案:

答案 0 :(得分:0)

也许使用其他更新方式。如果testprovincia已经存在,那么使用here描述的方法可能会为您提供帮助。而不是使用makepersistent,使用持久性管理器获取数据并直接更新它。

那或使用标准数据存储区的db(或ndb)put,正如here所解释的那样?你真的需要JDO吗?