Объективировать — добавить @Id к любому классу

У меня есть много пользовательских классов объектов, используемых как сервером (GAE), так и клиентом (Android) в системе RESTful. Для простоты сопровождения код этих объектов является общим для сервера и клиента.

Чтобы сделать эти объекты доступными для хранения с помощью Objectify на стороне сервера, одно поле должно быть аннотировано @Id. Однако я не могу сделать это в каждом классе объектов без импорта javax.persistence на клиенте (или создания отдельных копий кода клиент/сервер) (или для каждого объекта создания «StorableX extends X» с клонированием).

Можно ли использовать шаблон адаптера или оболочки для динамического сохранения любого объекта через Objectify? Какова наилучшая практика для этого?

Спасибо, --Джон


person John Kane    schedule 01.05.2011    source источник


Ответы (1)


Обычно нет проблем с использованием аннотированного класса без интерфейса аннотации, присутствующего в пути к классам, даже если аннотация относится к среде выполнения. Другое дело, если байт-код класса инструментирован или какой-то класс пытается использовать аннотацию во время выполнения.

person JB Nizet    schedule 01.05.2011
comment
Идентификатор не может быть преобразован в тип, что препятствует сборке и запуску клиента. - person John Kane; 02.05.2011
comment
Добавьте jar javax.persistence для создания аннотированных классов, но не включайте его в путь к классам клиента во время выполнения. Если эти классы являются общими для сервера и клиента, их следует компилировать один раз для обоих уровней, а не дважды. - person JB Nizet; 02.05.2011
comment
Если javax.persistence.Id импортирован в общий аннотированный класс X, он может быть успешно создан и добавлен в путь к классам сервера и клиента. Однако когда клиент пытается создать экземпляр объекта типа X, он не может обработать import javax.persistence.Id; - person John Kane; 02.05.2011
comment
Для справки, я использую Eclipse. Общий проект не указан как ссылка на проект для сервера или клиента, он не указан как проект в пути сборки сервера или клиента и не использует src через ссылку. - person John Kane; 02.05.2011
comment
import не является оператором времени выполнения. Это время компиляции. Вы должны иметь возможность использовать свой аннотированный класс без аннотации ID в пути к классам. Вы пробовали? У вас была ошибка? - person JB Nizet; 02.05.2011
comment
Я пытаюсь понять ваш вопрос здесь. Зачем вам нужна аннотация @Id для клиентского класса? Если вы говорите, что класс используется совместно клиентом и сервером, разве это не нормально? В этом случае у меня был бы класс Main Entity с @Entity и всеми подклассами, которые будут сохранены с аннотацией @EntitySubclass - person Shaun; 26.04.2013