嘿,我的問題是關於在JDO中堅持一個實體。我創建了一個StoredOPDSFeed類,它的成員保持正確。但是,它的所有成員對象都沒有正確保存。該類如下:JDO不會在Google App Engine中創建擁有的實體
@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.
}
所有簡單的成員,如語言環境,標題,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.
}
雖然我很欣賞鏈接,但不幸的是,該評論根本不適用。我所指的大多數成員都擁有一對多關係,正如您所看到的,該類中擁有的一對一關係已被設置爲嵌入式。這確實會導致所擁有的一對一關係,但是,所以這個答案至少可以解釋這種行爲,所以我明白這一點。但主要問題尚未解決。 – OverclockedTim 2011-06-01 16:10:11
您可以向我們展示OPDSLink和OPDSFacetGroup類的代碼嗎?你也試過刪除@Element(dependent =「true」)? – fivanski 2011-06-01 16:18:30
絕對 - 我添加了OPDSLink定義,因爲它是兩個類中較簡單的。我原來的代碼不包含@Element(dependent =「true」),它不起作用。我添加了「@Element(dependent =」true「)」來查看它是否會有所作爲(因爲在這種情況下OPDSLink確實是依賴的)。謝謝你的時間! – OverclockedTim 2011-06-01 16:36:55