GAE数据存储:如何存储自定义对象的arraylist

时间:2013-11-22 12:40:00

标签: java google-app-engine arraylist google-cloud-datastore objectify

我必须为学校开发一个Web应用程序,但我有以下问题:我有一个具有一些属性的对象,其中一个是带有自定义对象的arraylist。然后我使用objectify将对象放在数据存储区中,但当我检查gae仪表板数据存储区查看器时,它具有所有属性,但不具有arraylist。

为了更好地了解它的工作原理: 这是包含arraylist的对象:

public class Competentie implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id Long id;
    private String competentie;
    List<Stelling> deStellingen = new ArrayList<Stelling>();

    public Competentie(String c){
        competentie = c;
    }

    public Competentie(){}

    public String getCompetentie(){
        return competentie;
    }

    public void setCompetentie(String c){
        competentie = c;
    }

    public void voegStellingToe(Stelling s){
        deStellingen.add(s);
    }

    public List<Stelling> getStellingen(){
        return deStellingen;
    }
}

这就是我把它放在数据存储区中的方式

public void createCompetentie(String comp){
   Competentie c = new Competentie(comp);
   ofy.put(c);
}

有人可以帮我解决这个问题吗?如果有人需要更多信息,请问。

1 个答案:

答案 0 :(得分:1)

在这里查看维基: https://code.google.com/p/objectify-appengine/wiki/Entities#Embedding

您是否在Stelling类上使用了@Embed?这是我唯一能想到的。他们还有一系列要在嵌入类中牢记的事项,它们是: 要记住的一些事情:

这不支持任何类型的二维结构。 您不能将@Embed数组/集合嵌套在其他@Embed数组/集合中。 您不能将本机类型的数组/集合放在@Embed数组/集合中。 但是,您可以在任意数量的@Embed类中嵌套@Embed数组/集合。 您应该初始化集合。空或集合不会写入数据存储区,因此在加载期间会被忽略。此外,具体实例将按原样使用,允许您使用Comparators或其他状态初始化集合。

如果上面的一个是真的,你也可以考虑对deStellingen对象进行searlizing,但是你不能查询它。 https://code.google.com/p/objectify-appengine/wiki/Entities#Serializing