Каков правильный способ постоянного хранения внутреннего класса в GAE / J JDO? - PullRequest
1 голос
/ 02 мая 2011

Из документации GAE , я могу прочитать это:

Вид сущности получен из простого имени класса (внутренние классы используют $ 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 ]

2 голосов
/ 02 мая 2011

Самым очевидным было бы превращение Message в статический класс (из-за идеи сохранения нестатических классов у меня болит голова) и аннотирование его @PersistenceCapable. Это тогда заставит это быть превращено в его собственную таблицу. Лучше всего вместо этого переместить его в отдельный файл (и изменить его на «private private»).

0 голосов
/ 02 мая 2011

Objectify - удобный интерфейс хранилища данных, построенный поверх GAE - определяет @ Embedded для такой ситуации. Если вы еще не искали такой инструмент, это хорошая возможность. Если вы предпочитаете низкоуровневый API, я не могу вам помочь.

...