Необходимо е да актуализирате първичния ключ на съществуващи обекти в GAE Java

Създавам уеб приложение, използвайки GAE Java. Имам клас, който използва дълъг ID (генериран от appengine) като първичен ключ.

Сега искам да създам нов клас, който да бъде родителският клас на този оригинален клас (връзка едно към много), но детето трябва да има първичен ключ от тип "ключ", а не дългия идентификатор, който имам сега.

Кой е най-добрият начин да промените първичния ключ да бъде тип "ключ" вместо дълъг за съществуващите постоянни обекти? Трябва ли да създам нов клас с първичен ключ от тип „ключ“ и да създам и запазя нови обекти, които копират стойностите на полетата от старите? Или мога по някакъв начин просто да актуализирам съществуващия клас?

Благодаря


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


Отговори (2)


Всъщност ключът на постоянен обект се счита за неизменен. Промяната на ключа ще без съмнение е еквивалентна на промяната на използвания екземпляр. Това, което ви предлагам, е да свържете първоначалния си обект с дете на създадения от вас родител.

person Riduidel    schedule 17.02.2010

Бихте могли да съхранявате съществуващите дълги идентификатори в списък в родителския клас: това ще създаде необходимата връзка родител-дете един към много.

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

Промяната на ключа означава промяна на самия обект (а също и неговата група обекти).

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

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

person markvgti    schedule 29.03.2010