【问题标题】:Properties as indexed map in gae-datastore在 gae-datastore 中作为索引映射的属性
【发布时间】:2011-10-17 16:07:27
【问题描述】:

我对来自 Google App Engine 的 Low-Level Datastore 有一点但很重要的疑问。 我需要这样的文档结构:

{infNfe id="1234"
    det={nItem="1",prod="prodname"},
    det={nItem="2",prod="prodname"},
    det={nItem="3",prod="prodname"}
}

请注意,det 元素也是一个 Map,但不幸的是数据存储不接受 Map 作为 indexed 属性。

锁定一些例子,我发现了类似的东西:

Entity i = new Entity("infNfe","key");
i.setProperty("id",1234);
Entity det1 = new Entity("det",i.getKey());
det1.setProperty("nItem",1);
det1.setProperty("prod","prodname");
..Others dests..

但是,当我查询一些子实体时,我得到不完整的引用。

Query dq= new Query("det");
dq.setAncestor(i.getKey());
..Printing result..
{nItem="1",prod="prodname"}

通过这种方法,我一次只能得到一个 det 实体。 我怎样才能同时得到父母和孩子?

谢谢.....

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore


    【解决方案1】:

    子方法的问题在于您最终会得到很多实体,这意味着更多的成本,因为您需要为每个 get/put/query 结果付费(至少在新定价下)。

    Objectify 是执行这些查询的绝佳框架。要使用 Objectify 进行映射,请创建第二个类,其中包含要映射的两种类型:

    class Det
    {
        long nItem;
        String prod;
    }
    
    class InfNfe
    {
        @Id Long id;
        @Embedded List<Det> dets;
    }
    

    然后它将存储如下数据

    id = 1
    dets.nItem = [1, 2, 3, 4]
    dets.prod = ["A", "B", "C", "D"]
    

    使用 Objectify,您可以指定哪些项目被索引,并且您可以根据其中的一些数据进行查询(尽管我不知道它如何管理查询数组中间的数据)。

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      相关资源
      最近更新 更多