我试图将现有(Item)实体设置为另一种实体(评级)的父实体。所以我可以让我的用户评价项目。
目前,Item实体的祖先具有不同种类的祖先等,如下所示。在方案1中,无法找到Item实体作为Rating的父级。但在情景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);
这些是物品实体。
如您所见,此项目很简单,没有任何额外的祖先密钥。你可以在下面看到它有效。
这是与父母/王子一起的。
如下所示,它无法正常工作。
答案 0 :(得分:1)
你有:
String target = req.getParameter("target");
Key k = KeyFactory.createKey("Item", Long.parseLong(target));
这将为您提供 项目的密钥,其long
id为target
的值。它可能不是您正在寻找的Item
。
假设您的trgt
有意成为方案一中的Item
,您无法仅通过ID检索它 - 您需要Category > Aisle > Group > Type > Item
的完整密钥路径,因为ID仅在实体组。
此外,您的raterkind
始终为"Customer"
- you want
if (type.equals("user")) {...}
而不是
if (type=="user") {...}