迁移到HRD - 如何将字符串编码的密钥转换为新的应用程序

时间:2012-03-18 16:50:44

标签: java google-app-engine

我已经开始从我们的M / S应用程序迁移到HRD。 我想知道你是否可以推荐我如何将旧的字符串编码密钥转换为新的密钥。

我知道字符串编码的密钥包含应用程序名称,但我不确定是否还有其他需要处理的细节。另外,我找不到任何论坛帖子,它有Java的代码示例转换“字符串编码键”,这看起来很奇怪(只有python论坛讨论它)。

我将在此事上获得任何帮助。

顺便说一句,我想要运行以下内容,虽然我担心它不起作用或涵盖所有方面:

    private static String convertKey(String encodedKey) {
    Key key = KeyFactory.stringToKey(encodedKey);       
    Key newKey = KeyFactory.createKey(key.getKind(), key.getId());      
    return KeyFactory.keyToString(newKey);
}

谢谢! URI

3 个答案:

答案 0 :(得分:1)

使用以下递归函数generateKey(Key key)可以覆盖所有情况(级联父级)以进行编码的字符串键转换。其他两个函数是一个结束键集合转换的包装器。 http://www.geotrack24.com

private Key generateKey(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());  
    }  
}

private String convertKey(String encodedKey) {
    Key key = KeyFactory.stringToKey(encodedKey);      
    return KeyFactory.keyToString(generateKey(key));
}   

private Set<String> convertKeys(Set<String> keys){
    Set<String> newkeys = new HashSet<String>();
    for(String key: keys){
        newkeys.add(convertKey(key));
    }
    return newkeys;
}

答案 1 :(得分:0)

为什么你认为你需要转换密钥?迁移工具将复制您的所有数据,并在此过程中重新创建密钥,以便他们正确引用新的应用程序。

答案 2 :(得分:0)

只要实体是没有其他父母的父实体,上述代码就会起作用。 如果您有子实体,则还必须迁移父键。

例如:

Key parentKey = key.getParent(); 
Key newParentKey = KeyFactory.createKey(parentKey.getKind(), parentKey.getId());

只有这样你才能使用这段代码

Key newKey = KeyFactory.createKey(newParentKey,childKey.getKind(), childKey.getId());      

此示例仅适用于一个父级,如果您有多个父级,则必须多次使用此代码。