我对Google App Engine的低级数据存储有一点但又重要的疑问。 我需要一个像这样的文档结构:
{infNfe id="1234"
det={nItem="1",prod="prodname"},
det={nItem="2",prod="prodname"},
det={nItem="3",prod="prodname"}
}
请注意, det 元素也是一个地图,但遗憾的是数据存储区不接受Map作为索引属性。
锁定一些例子,我找到了类似的东西:
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 实体。 我怎样才能立刻得到父母和孩子?
感谢.....
答案 0 :(得分:0)
子方法的问题在于你最终会有很多实体,这意味着更多的成本,因为你按每个获取/放置/查询结果付费(至少在新定价下)。
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,您可以指定哪些项被编入索引,并且您可以根据这些数据进行查询(尽管我不知道它如何设法在数组中间查询数据)。