在AppEngine数据存储区中定义内部类(Objectify)

时间:2013-10-27 11:29:12

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

在AppEngine中,我需要一个entity Diagram,其中包含idtitleinner class Box元素的变量列表,每个元素都包含iddescription

请在下面找到定义。但是,在定义EntityProxy List getter和setter时:"The type java.util.List<Box> cannot be used here"

DIAGRAM.java

@Entity
public class Diagram extends DatastoreObject {

    public class Box {
    private String boxId;
    private String description;
    public String get_id() {
        return boxId;
    }
    public void set_id(String boxId) {
        this.boxId = boxId;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }

    @Indexed private String diagramId; // Primary key
    @Indexed private String title;
    @Embedded private List<Box> boxes;

    public String get_id() {
        return diagramId;
    }
    public void set_id(String diagramId) {
        this.diagramId = diagramId;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public void setBoxes(List<Box> boxes) {
        this.boxes = boxes
    }
    public List<Box> getBoxes() {
        return boxes;
    }
}

DIAGRAMPROXY.java

[...]
    List<Box> getBoxes();
    void setBoxes(List<Box> boxes);
[...]

2 个答案:

答案 0 :(得分:3)

你的内心班必须是static。非静态内部类具有到外部类的实例的隐式链接,从加载和保存实体到数据存储区的角度来看,这实际上会让人感到困惑。

答案 1 :(得分:1)

令人困惑的是,Box类中有Collection<Box>?听起来不对..无论如何,内部Box类必须是市场static或移动到不同的文件。在Box类上使用@Embed(版本4.0)注释。

此外,假设DatastoreObject是您所有实体的基础,您可以将DatastoreObject设为@Entity,将其所有子类设为@EntitySubClass (index = true)。显然,所有子实体都将保存在数据存储区中相同的“种类”(DatastoreObject)下。