Мне потребовалось некоторое время, чтобы понять, что проблема заключалась в составной id сущности Person.
Ниже приведен фрагмент кода PojoLocator
, который используется моим прокси-сущности .
public class PojoLocator extends Locator<DatastoreObject, Long>
{
@Override
public DatastoreObject find(Class<? extends DatastoreObject> clazz, Long id)
{
}
@Override
public Long getId(DatastoreObject domainObject)
{
}
}
Чтобы получить дочернюю сущность из хранилища данных, вам необходимо иметь идентификатор родительского класса.Чтобы добиться этого, я переключил «ID class» для Locator <> на String, который представляет текстовую форму класса Objectify's Key <>.
Вот как выглядит теперь:
public class PojoLocator extends Locator<DatastoreObject, String>
{
@Override
public DatastoreObject find(Class<? extends DatastoreObject> clazz, String id)
{
Key<DatastoreObject> key = Key.create(id);
return ofy.load(key);
}
@Override
public String getId(DatastoreObject domainObject)
{
if (domainObject.getId() != null)
{
Key<DatastoreObject> key = ofy.fact().getKey(domainObject);
return key.getString();
} else
return null;
}
}
Обратите внимание, что ваша реализация может немного отличаться, потому что я использую Objectify4.