【问题标题】:How to store a List of @Embedded objects in GAE-JDO?如何在 GAE-JDO 中存储 @Embedded 对象列表?
【发布时间】:2012-01-05 23:32:15
【问题描述】:

我正在尝试在 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 中对这些数据建模的“正确”方法是什么?

【问题讨论】:

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


    【解决方案1】:

    GAE/J 文档中没有任何地方说它们支持存储可嵌入对象的集合;仅仅是因为没有诸如连接表之类的东西可以存储在 GAE/J 中。想想你认为应该在哪里存储这些元素。如果您的意思是与所有者在同一个表中,那么这就是您拥有@Serialized 的原因。

    PS 你不需要在这些字段上使用@Persistent;对于所有主要类型,它们默认为持久化。

    【讨论】:

    • 是的,我希望可嵌入对象的集合存储在所有者的表中。如何使用@Serialized?我是否需要序列化子对象列表并将其作为 Blob 存储在所有者表中?
    • 很高兴有人反对我的回答。也许他们也可以指出他们认为这个答案有什么问题,然后我可以尝试纠正它,只是一个想法。或者,也许有人在这里有一个隐藏的议程?也许为甲骨文工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2012-06-14
    • 2020-05-18
    相关资源
    最近更新 更多