Хранение разных экземпляров одного и того же класса в хранилище данных GAE

Чрезвычайно запутанное название, я знаю.

Привет, я столкнулся с некоторыми фанковыми проблемами здесь.

У меня есть класс свойств, как это

@PersistenceCapable 
public class Property implements Serializable
{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
    private String key;
        //...
}

Теперь у меня также есть два других класса. Назовем их Фабрика и Магазин. У них обоих есть свойства, например:

@PersistenceCapable 
public class Factory implements Serializable
{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
    private String key;
    @Persistent
    private String m_Name;
    @Persistent
    private List<Property> m_FactoryProperties;
}

а также

@PersistenceCapable 
public class Store implements Serializable
{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
    private String key;
    @Persistent
    private String m_Name;
    @Persistent
    private List<Property> m_StoreProperties;
}

Хотя это выглядит просто, это не сработает. И я понятия не имею, почему, я предполагаю, что это связано с индексом, так как в средстве просмотра данных GAE есть либо m_FactoryProperties_INTEGER_IDX, либо m_StoreProperties_INTEGER_IDX, когда я просматриваю объекты свойств. (Они никогда не появляются одновременно).

(Не работает, если я также переименую списки в m_Propertys)...

Разве это невозможно? Я МОГУ создать классы FactoryProperty и StoreProperty, но это было бы ужасно неправильно. Другим решением, о котором я думаю, является создание суперкласса, который содержит список свойств, а затем наследование Factory и Store от этого класса, что ДОЛЖНО заставить их совместно использовать индекс, я думаю... Должен ли я просто пропустить принадлежащие отношения и перейти к бесхозный?

Я чувствую, что могу просто пропустить что-то важное. Есть идеи?

Спасибо


person Fredrik Widerberg    schedule 04.04.2011    source источник


Ответы (1)


В отношении собственности свойство может принадлежать только одному классу. вы также должны добавить ссылку на свойство в родительском классе, а затем

ex.

Собственность

@Persistent
private Store store;

Магазин

@Persistent(mappedBy = "store")
private List<Property> protperties;

Если вы хотите использовать одни и те же свойства в магазине и фабричном классе, вы должны использовать решение для бесхозных отношений.

Фабрика

@Persistent
private Set<Key> properties;

Магазин

@Persistent
private Set<Key> properties;
person mjspier    schedule 04.04.2011