Переименуйте поле с помощью Objectify и Google App Engine - PullRequest
0 голосов
/ 22 марта 2011

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

class Person {
   String name; //The original declaration was "String fullName"    
}

Согласно объективации вы должны использовать аннотацию @AutoLoad(""). Это нормально, и это работает, так как Google Datastore не удаляет данные на самом деле, но создает новое поле, поэтому эта аннотация похожа на отображение между старым и новым полем. Нет проблем, когда вы читаете всю таблицу.

Проблема возникает, когда вы применяете фильтр к своему запросу (предположим, вы создали 5 объектов со старым именем и 5 с новым именем). Результат вашего запроса зависит от того, использовали ли вы старое имя переменной или новое (возвращает только 5, но не 10). Он не получит их обоих и не отобразит их. Есть предложения по этой проблеме? Я надеюсь, что объяснил это ясно.

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Если вы изменили имя своего поля, вам нужно загрузить и заново поместить все ваши данные (одним из вариантов здесь будет использование API mapreduce). В этом нет волшебного пути - сохраненные вами данные существуют на диске под двумя разными именами.

1 голос
/ 22 марта 2011

Самое простое и понятное решение.получить все данные с пометкой "AutoLoad ()".Затем сохраните их снова.Таким образом, они будут сохранены как новое поле.Старый больше не существует или, по крайней мере, он больше не содержит никаких данных.Это похоже на перенос данных из старого имени в новое.У кого-нибудь есть лучшие предложения?

0 голосов
/ 22 марта 2011

Вы можете использовать @OldName http://www.mail-archive.com/google-appengine-java@googlegroups.com/msg05586.html

...