2011-11-24 60 views
1

我想在GAE/JDO中存儲一個嵌入對象列表。我得到一個Datanucleus異常:如何在GAE-JDO中存儲@Embedded對象列表?

字段「Product.shippingOptions」類型爲「java.util.List」,但已被指定爲嵌入式。 DataNucleus不支持嵌入這種類型。您的嵌入式類型必須是PersistenceCapable。

這是我班的一個簡化版本:

@PersistenceCapable(identityType=IdentityType.APPLICATION, detachable="true") 
public class Product 
{ 
    @PrimaryKey 
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) 
    private Long id; 

    @Persistent(defaultFetchGroup = "true") 
    @Embedded 
    private List<ShippingOption> shippingOptions; 
} 

@PersistenceCapable 
@EmbeddedOnly 
public class ShippingOption 
{ 
    @Persistent 
    private String shippingType; 

    @Persistent 
    private int price; 

    @Persistent 
    private String currency; 
} 

我不希望使用一個單獨的表/一種存儲每個產品的航運選擇,因爲運送選項也需要在創建時與Order對象一起存儲。

有沒有辦法在GAE/JDO中存儲子對象列表?如果不是,在GAE/JDO中對這些數據建模的「正確」方式是什麼?

回答

1

GAE/J docs中沒有地方說它們支持存儲可嵌入對象的集合;僅僅是因爲沒有這樣的事情,如連接表那裏將存儲在GAE/J。想想你認爲應該在哪裏存儲這些元素。如果你的意思是與所有者在同一張表中,那麼這就是爲什麼你有@Serialized。

PS你不需要@Persistent這些字段;它們默認爲所有主要類型的持久性。

+0

是的,我期望可嵌入對象的集合被存儲在所有者的表中。我如何使用@Serialized?我是否需要序列化子對象列表並將其作爲Blob存儲在所有者表中? – KenSV

+0

不好意思的人downvote我的答案。也許他們也可以指出他們這個答案雖然是一個這樣的問題,然後我可以試圖糾正它,只是一個想法。或者也許有人在這裏有一個隱藏的議程?可能爲Oracle工作? – DataNucleus