Как сохранить список объектов @Embedded в GAE-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?


person KenSV    schedule 24.11.2011    source источник


Ответы (1)


Нигде в документах GAE/J не говорится, что они поддерживают хранение коллекции встраиваемых объектов; просто потому, что в GAE/J нет таких вещей, как соединяемые таблицы. Подумайте, где, по вашему мнению, он должен хранить эти элементы. Если вы имеете в виду ту же таблицу, что и владелец, то именно поэтому у вас есть @Serialized.

PS Вам не нужен @Persistent для этих полей; по умолчанию они являются постоянными для всех основных типов.

person DataNucleus    schedule 25.11.2011
comment
Да, я ожидаю, что коллекция встраиваемых объектов будет храниться в таблице владельца. Как использовать @Serialized? Нужно ли мне сериализовать список дочерних объектов и хранить его как большой двоичный объект в таблице владельца? - person KenSV; 26.11.2011
comment
Приятно, что кто-то понизил мой ответ. Возможно, они также могли бы указать, что, по их мнению, было такой проблемой с этим ответом, и тогда я мог бы попытаться исправить это, просто мысль. А может быть, у кого-то здесь есть скрытый план? работать на Oracle, может быть? - person DataNucleus; 09.05.2012