2011-06-01 56 views
1

嘿,我的問題是關於在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. 
} 

回答

2

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

+0

雖然我很欣賞鏈接,但不幸的是,該評論根本不適用。我所指的大多數成員都擁有一對多關係,正如您所看到的,該類中擁有的一對一關係已被設置爲嵌入式。這確實會導致所擁有的一對一關係,但是,所以這個答案至少可以解釋這種行爲,所以我明白這一點。但主要問題尚未解決。 – OverclockedTim 2011-06-01 16:10:11

+0

您可以向我們展示OPDSLink和OPDSFacetGroup類的代碼嗎?你也試過刪除@Element(dependent =「true」)? – fivanski 2011-06-01 16:18:30

+0

絕對 - 我添加了OPDSLink定義,因爲它是兩個類中較簡單的。我原來的代碼不包含@Element(dependent =「true」),它不起作用。我添加了「@Element(dependent =」true「)」來查看它是否會有所作爲(因爲在這種情況下OPDSLink確實是依賴的)。謝謝你的時間! – OverclockedTim 2011-06-01 16:36:55

相關問題