Проведение разных экземпляров одного и того же класса в хранилище данных 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, но это было бы ужасно неправильно. Другое решение, о котором я думаю, - это создание суперкласса, который содержит список Propertys, а затем наследует Factory и Store от этого класса, и я ДОЛЖЕН сделать так, чтобы они разделяли индекс, я думаю... Должен ли я просто пропустить собственные отношения и перейти к бесхозный?

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

Спасибо

1 ответ

Решение

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

ех.

Proprety

@Persistent
private Store store;

хранить

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

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

завод

@Persistent
private Set<Key> properties;

хранить

@Persistent
private Set<Key> properties;
Другие вопросы по тегам