Я работаю над приложениями на основе GAE, которые используют JDO для доступа к хранилищу данных.Мне нужно реализовать полиморфные отношения между постоянными объектами.
Есть абстрактный родительский класс:
@PersistenceCapable
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
public abstract class Parent {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
String id;
// ....
И несколько дочерних классов:
@PersistenceCapable (identityType = IdentityType.APPLICATION)
public class Child extends Parent {
// ....
Также есть еще один класс, который должен иметь ссылку на один из дочерних классов.В соответствии с разделом «Полиморфные отношения» статьи «1010 *« Отношения сущностей в JDO », лучший способ реализовать такие отношения - хранить ключ объекта, поэтому этот класс выглядит следующим образом:
@PersistenceCapable (identityType = IdentityType.APPLICATION)
public class OtherClass {
@Persistent
private String reference;
// ....
Я получаю строковый ключ ссылочного объекта из экземпляра OtherClass.Затем я хотел бы получить сам ссылочный объект: это экземпляр одного из родительских подклассов.НО:
Выдается исключение JDOObjectNotFoundException ( javax.jdo.JDOObjectNotFoundException: Нет такого объекта FailedObject: ... ).
Исключение FatalNucleusUserException выдается ( org.datanucleus.store.appengine.FatalNucleusUserException: получен запрос на поиск объекта типа Parent, но предоставленный идентификатор является строковым представлением ключа для типа Child )
Как правильно извлечь экземпляр одного из подклассов, на которые ссылается другая сущность?
ОБНОВЛЕНИЕ : Я нашел этот поток в группе Google GAE, но, честно говоряэто мне не очень помогло.