Проведение разных экземпляров одного и того же класса в хранилище данных 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;