如何在GAE-JDO中存储@Embedded对象列表?

时间:2011-11-24 22:38:13

标签: google-cloud-datastore data-modeling jdo

我正在尝试在GAE / JDO中存储嵌入对象列表。我得到了Datanucleus例外:

  

字段“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 个答案:

答案 0 :(得分:1)

在GAE / J文档中没有任何地方说它们支持存储可嵌入对象的集合;只是因为没有像连接表这样的东西,它们将被存储在GAE / J中。考虑一下您认为应该存储这些元素的位置。如果你的意思是与所有者在同一个表中,那就是为什么你有@Serialized。

PS你在这些领域不需要@Persistent;它们默认为所有主要类型的持久性。