【问题标题】:GWT: decrypt GAE-JDO key to access parentGWT:解密 GAE-JDO 密钥以访问父级
【发布时间】:2013-02-03 01:27:48
【问题描述】:

GAE-JDO 文档建议可以从子键中检索父键:

另请注意,密钥的字符串表示形式未加密:用户可以对密钥字符串进行解码以提取其组成部分,包括实体及其祖先的种类和标识符。

参考号:"Entities, Properties, and Keys"

我正在使用以下方法生成密钥:

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private String id;

检查数据存储时,我的实体键如下所示:

parent.id = agpzfnZpdmVlbGFichQLEgdTZXNzaW9uGICAgICgwMsIDA
child1.id = agpzfnZpdmVlbGFiciYLEgdTZXNzaW9uGICAgICgwMsIDAsSBVN0YWdlGICAgICAwK8KDA
...

(其中 Parent 有 Child 类型的孩子)。所以,我正在寻找的是这样的 GWT 函数:

String getParentIdFromChildId(String childId) {
    String parentId = ...        
    return parentId;
}

这样我就可以从客户端 (GWT) 引用子对象(首先找到它的父对象):

Child child = data.getParent(getParentIdFromChildId(childId)).getChild(childId);

我也可以通过跟踪父 id 来解决这个问题,但是如果父信息已经嵌入到子 id 中,那么这是低效的。

提前致谢。

~欧文

【问题讨论】:

  • 您是否找到了在 Java 或 python 中执行此操作的算法或例程?如果是,则 java 版本应该直接在 gwt 中工作或者应该易于移植。
  • 不,还没有找到如何在 Java 或 Python 中做到这一点。
  • 似乎子 id 是由附加到父字符串的字符串组成的,如果模式是子 id 从固定位置开始,算法是微不足道的,但我不相信。尝试寻找更多相关文档或使用更多键。

标签: google-app-engine gwt key jdo


【解决方案1】:

child1.getParent() 返回实体 child1 的父级的键。

因此,如果您有一个实体 child1,并且您想要其父 ID,只需调用:

String parentId = child1.getParent().id;

返回它的父 ID。

在这里阅读更多: Entity 'getParent()' Method Documentation

不确定这是否是您想要的,但我会这样做。

谢谢,

~萨米尔

【讨论】:

  • 您的解决方案适用于 App Engine - 我需要 GWT 解决方案。
猜你喜欢
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多