【发布时间】:2015-10-10 13:36:14
【问题描述】:
我正在尝试将现有(项目)实体设置为另一种(评级)实体的父级。这样我就可以让我的用户对商品进行评分。
目前,Item 实体有一个祖先和不同种类的祖先等,如下所示。在方案 1 中,无法找到作为评级的父项输入的项目实体。但在场景 2 中,它运行良好。
Scenario 1 Scenario 2
Category
v
Aisle
v
Group
v
Type
v
Item >>>>> getKey() Item >>>>> getKey()
v v
Rating Rating
请帮忙!当该项目没有祖先时,它可以正常工作,但是当它具有所有祖先时,我需要它来让它不起作用!!!
这是我正在使用的代码。
DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
int rating = Integer.parseInt(req.getParameter("rating"));
String type = req.getParameter("type");
String raterid = req.getParameter("rater");
String target = req.getParameter("target");
Key k = KeyFactory.createKey("Item", Long.parseLong(target));
Entity trgt = null;
try {
trgt = datastoreService.get(k);
} catch (EntityNotFoundException e) {
e.printStackTrace();
}
Key k = KeyFactory.("Item", target);
Key r;
String raterkind;
if (type=="user"){
raterkind = "Deliverer";
}
else {raterkind = "Customer";}
r = KeyFactory.createKey(raterkind,raterid);
Entity ratingentity = null;
if (trgt != null) {
ratingentity = new Entity("rating",trgt.getKey());
}
else {
ratingentity = new Entity("rating",k);
}
ratingentity.setProperty("target",k);
ratingentity.setProperty("rating",rating);
ratingentity.setProperty("rater",r);
datastoreService.put(ratingentity);
这些是项目实体。
如您所见,这个项目很简单,没有任何额外的祖先键。你可以在下面看到它的工作原理。
这是与父母/祖先的关系。
如下所示,它不起作用。
【问题讨论】:
-
你读过这个吗?:cloud.google.com/appengine/articles/scaling/contention?hl=en 特别是关于保持实体组小的部分。
-
您需要显示一些代码 - 您如何尝试检索
Item?您的问题也不清楚:您说 Item 实体有多个祖先 - 它有 一个 祖先,Type,而后者又具有另一个祖先。一个实体只能有一个直系祖先。 -
好的,我看过文档,我想我天真地认为我可以在没有任何问题的情况下引入这个级别而不是祖先@Kekito。
-
感谢@tx802 的其他帖子的链接,这很有意义,也许我不需要比实际项目高出这么多级别。拥有一种称为 parentCategory 的想法是有道理的。如果他们都是同类,我还能保持这种水平的血统并避免这些问题吗?
标签: google-app-engine google-cloud-datastore