Необходимо обновить первичный ключ на существующих объектах в GAE Java - PullRequest
2 голосов
/ 02 февраля 2010

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

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

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 17 февраля 2010

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

0 голосов
/ 29 марта 2010

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

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

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

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

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

...