2

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

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

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

Благодаря

ответ

3

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

0

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

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

Изменение ключа означает изменение самого объекта (а также его группы объектов).

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

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