JDO не создает собственные объекты в Google App Engine - PullRequest
1 голос
/ 01 июня 2011

Эй, ребята, мой вопрос о сохранении сущности в JDO. Я создал класс StoredOPDSFeed, члены которого сохраняются правильно. Однако ни один из его объектов-членов не сохраняется правильно. Класс выглядит следующим образом:

@PersistenceCapable
public class StorableOPDSFeed implements Serializable {

private static final long serialVersionUID = 1L;

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private String primaryKey;

@Persistent
private String locale;

@Persistent
private Date parseDate;

@Persistent
private String title;

@Persistent
private String href;

@Persistent
@Element(dependent = "true")
private ArrayList<OPDSEntry> entries;

@Persistent
@Element(dependent = "true")
private ArrayList<OPDSLink> links = new ArrayList<OPDSLink>();

@Persistent
@Embedded
private SearchDescription searchDescription;

@Persistent
private boolean isStart = false;

@Persistent
@Element(dependent = "true")
private ArrayList<OPDSFacetGroup> facet_groups = new ArrayList<OPDSFacetGroup>();

... and accessors, etc.
}

Все простые элементы, такие как locale, title, href и т. Д., Сохраняются правильно. Однако все сложные, такие как searchDescription, не отображаются в хранилище данных. Там нет ни ссылки на них, ни внешнего ключа, ничего. Как будто они полностью игнорируются. У кого-нибудь есть идеи почему?

По запросу, вот код для OPDSLink:

@PersistenceCapable
public class OPDSLink implements Serializable { 
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String encodedKey;

private static final long serialVersionUID = 1L;

@Persistent
private String href;

@Persistent
private String rel;

@Persistent
private String type;

@Persistent
private String price;

@Persistent
private String currency;

@Persistent
private String dcformat;

@Persistent
private String title;
... and accessors, etc.
}

1 Ответ

2 голосов
/ 01 июня 2011

Документация GAE JDO гласит, что в отношениях один-к-одному обеим вовлеченным сущностям требуется ключевое поле.http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html#Owned_One_to_One_Relationships

Если другая сущность встроена, как задумано в вашем примере, для другого класса (например, SearchDescription) требуется аннотация @EmbeddedOnly: http://code.google.com/appengine/docs/java/datastore/jdo/dataclasses.html#Embedded_Classes

В общем, я нашел следующееИнтервью в блоге - хорошая отправная точка, чтобы узнать, что поддерживает реализация GAE JDO, а что нет (особенно в сравнении с такими сторонними средами, как Objectify и Twig): http://borglin.net/gwt-project/?page_id=604

...