Как сказано в этом посте: Миграция в HRD - Как преобразовать строковые ключи в новое приложение все ключи сущности содержат ссылку на идентификатор приложения. Если вы используете ключи, закодированные как String, эта ссылка не будет обновляться при копировании данных в новое приложение. Но вы можете сделать это самостоятельно.
Просто запустите запрос в новой среде, чтобы обновить каждый ключ, чтобы он указывал на новый идентификатор приложения.
В этом примере я предполагаю, что каждый объект реализует этот интерфейс:
Interface Entity{
public Key getKey();
public void setKey(Key key);
}
Теперь я могу использовать такой метод:
//...
List<Entity> entities = //... your query
for (Entity entity : entities){
entity.setKey(generateNewKey(entity.getKey());
}
//...
//Method written by Nikolay Ivanov in the other post, that recursive generate a new key respecting to parents
private Key generateNewKey(Key key) {
Key parentKey = key.getParent();
if(parentKey == null){
return KeyFactory.createKey(key.getKind(), key.getId());
}else{
Key newParentKey = generateKey(parentKey);
return KeyFactory.createKey(newParentKey, key.getKind(), key.getId());
}
}