在GAE / J JDO中持久存储内部类的正确方法是什么?

时间:2011-05-02 13:25:27

标签: java google-app-engine jdo inner-classes

GAE's documentation,我可以读到这个:

  

实体的类型是从类的简单名称派生的(内部类使用没有包名称的$ path)。

没有告诉我如何存储它,这个:

  

以下是嵌入类的示例。这个例子使嵌入式类成为使用它的数据类的内部类;这很有用,但不需要使类嵌入。

为什么有用?使课程“嵌入”的优势是什么?如果我不需要“嵌入”它,我该怎么办? 我很难理解最后的陈述。

假设我有这门课程:

@PersistenceCapable
public class ChatHistory {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private ArrayList<Message> messages;
    // more fields and all the ChatHistory methods here

    private class Message implements Comparable<Message>{ // <-- This one
        public String timeStamp;
        public String text;
        // more fields and all the Message methods here
    }
}

你会如何储存它?

2 个答案:

答案 0 :(得分:2)

最明显的事情是将Message变成一个静态类(尝试持久化非静态类的想法会让我头疼)并用@PersistenceCapable注释它。那将导致它变成自己的表。您最好建议将其移动到自己的文件中(并将其更改为'package private')。

答案 1 :(得分:0)

Objectify - 在GAE 之上构建的方便的数据存储区接口 - 为这种情况定义@Embedded。如果你还没有寻找这种工具,那似乎是一个很好的机会。如果您这样做并优先使用低级API,我无法再帮助您了。