Необходимо обновить первичный ключ существующих объектов в GAE Java.

Я создаю веб-приложение с использованием GAE Java. У меня есть класс, который использует длинный идентификатор (сгенерированный appengine) в качестве первичного ключа.

Теперь я хочу создать новый класс, который будет родительским классом для этого исходного класса (отношение один ко многим), однако дочерний элемент должен иметь первичный ключ типа «ключ», а не длинный идентификатор, который у меня есть сейчас.

Каков наилучший способ изменить первичный ключ на тип «ключ», а не на длинный для существующих постоянных объектов? Должен ли я создать новый класс с первичным ключом типа «ключ», а также создавать и сохранять новые объекты, которые копируют значения полей из старых? Или я могу как-то просто обновить существующий класс?

Спасибо


person user242153    schedule 02.02.2010    source источник


Ответы (2)


Фактически, ключ сохраняемой сущности считается неизменным. Изменение ключа будет, без сомнения, эквивалентно изменению используемого экземпляра. Я предлагаю вам связать ваш первоначальный объект с дочерним элементом созданного вами родителя.

person Riduidel    schedule 17.02.2010

Вы можете сохранить существующие длинные идентификаторы в списке в родительском классе: это создаст необходимые отношения «один ко многим родитель-потомок».

Однако вам придется самостоятельно управлять согласованностью (что может быть не слишком сложно, если ваш сайт не имеет очень высокого трафика), а родительский и дочерний классы не будут находиться в одной и той же группе сущностей (последствия для транзакций).

Изменение ключа означает изменение самого Entity (а также его группы сущностей).

В конечном счете, решение, которое работает для вас, будет зависеть от специфики вашей проблемы. Например, много ли уже существующих данных? Является ли это действующим приложением (т. е. оно уже используется)?

Другим решением может быть перенос вашего приложения на другую (более подходящую) модель данных, и сделать это для каждой учетной записи (заблокировав учетную запись на короткий период времени). Таким образом, изменение затронет лишь нескольких человек (если они получат доступ к приложению во время переноса их учетной записи), а не все приложение будет отключено.

person markvgti    schedule 29.03.2010