一个实体有多少祖先可以拥有限制?

时间:2015-10-10 13:36:14

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

我试图将现有(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);

以下是一些图片,展示了发生了什么。 enter image description here

这些是物品实体。

enter image description here

如您所见,此项目很简单,没有任何额外的祖先密钥。你可以在下面看到它有效。

enter image description here

这是与父母/王子一起的。

enter image description here

如下所示,它无法正常工作。

enter image description here

1 个答案:

答案 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") {...}