Как GAE / JDO преобразует Entities в объекты домена?

В реализации JDO в App Engine типы объектов сохраняются как «Kind» с сущностью, которая сохраняется в хранилище данных. Когда эти сущности извлекаются из хранилища данных, они автоматически возвращаются (на некотором уровне JDO) как исходный тип объекта. Что меня смущает, так это то, что сохраняется только простое имя класса; не полный путь. Так как же JVM загружает правильный класс?

Например, если у меня есть com.project.domain.User и я сохраняю экземпляр этого класса в хранилище данных, для типа Entity определен только User. Когда я использую JDO для возврата этих данных, я получаю обратно com.project.domain.User. Как GAE / JDO узнал, что загружать com.project.domain.User, а не com.project.other.domain.User?


person Brad    schedule 12.11.2010    source источник


Ответы (1)


Ваш провайдер JDO (GAE фактически не участвует в этом уравнении) поддерживает внутреннее отображение сущностей в таблицы. Иногда он формирует это из различных файлов xml, иногда - с помощью аннотаций (в зависимости от вашего стиля кодирования). В этой таблице имена таблиц фактически отображаются на полностью определенные классы.

Если бы вы хранили оба типа объектов User, JDO выдала бы вам исключение, потому что они использовали бы одну и ту же таблицу. Вы бы исправили это, указав другую таблицу (через аннотацию или конфигурацию xml). Эта спецификация войдет во внутреннее отображение JDO. Тогда JDO будет знать, как правильно разрешить сущность.

person Pace    schedule 12.11.2010
comment
Итак, как же это внутреннее сопоставление сохраняется между запуском / завершением работы JVM? Я ничего не определил в XML или аннотации. - person Brad; 12.11.2010
comment
Фактически в этом участвует GAE, поскольку поставщиком JDO является GAE (или, скорее, их плагин для DataNucleus). Если вы хотите решить эту проблему, это можно сделать с помощью этого класса code.google.com/p/datanucleus-appengine/source/browse/trunk/src/ - person DataNucleus; 12.11.2010