我有此代码来检查数据存储中是否已存在子实体。问题是它适用于一个父子关系,但总是为另一个关系返回 null。
我的应用中有四种实体 - ORG、Contact、Profile、ProfileOrg。联系人类型实体是 ORG 的子级,而 ProfileOrg 是 Profile 的子级。将联系人添加到 ORG 的逻辑是获取给定组织的所有子实体,然后检查属性。如果属性匹配,则返回实体,否则返回 null。这非常适用于 ORG-Contact 关系。但 Profile-ProfileOrg 关系的完全相同的逻辑不起作用。它总是返回 null。下面是我的代码:
这是获取所有子实体并检查其属性“orgID”是否匹配的代码。
public static Entity getSingleProfileOrg(Key profileKey, String orgID) {
Iterable<Entity> childProfileOrgs = Util.listChildren("profileOrg",profileKey);
for (Entity e : childProfileOrgs) {
if (e.getProperty("orgID").toString() == orgID) {
return e;
}
}
return null;
}
这是查询数据存储的代码。
public static Iterable<Entity> listChildren(String kind, Key ancestor) {
logger.log(Level.INFO, "Search entities based on parent");
Query query = new Query(kind);
query.setAncestor(ancestor);
query.addFilter(Entity.KEY_RESERVED_PROPERTY, FilterOperator.GREATER_THAN, ancestor);
PreparedQuery pq = datastore.prepare(query);
return pq.asIterable();
}
请帮忙。这让我陷入了困境。
编辑:为 org 获取 ChildEntities 的代码,效果很好
public static Entity getSingleContact(Key orgKey, String phoneContactID) {
Iterable<Entity> childContacts = Util.listChildren("contact", orgKey);
for (Entity e : childContacts) {
if (e.getProperty("contactID") == phoneContactID) {
return e;
}
}
return null;
}
编辑:创建或更新 ProfileOrg 的代码
public static void createOrUpdateProfileOrg(String profileID,
String orgName, String ownerID) {
String orgID = ownerID + "_" + orgName;
Entity Profile = Product.getProfile(profileID);
//Key profileKey = KeyFactory.createKey("Profile", profileID);
Key profileKey = Profile.getKey();
Entity profileOrg = getSingleProfileOrg(profileKey, orgID);
if (profileOrg == null) {
profileOrg = new Entity("profileOrg", profileKey);
profileOrg.setProperty("name", orgName);
profileOrg.setProperty("orgID", orgID);
profileOrg.setProperty("owner", ownerID);
profileOrg.setProperty("profileID", profileID);
Util.persistEntity(profileOrg);
}
}
线
Entity Profile = Product.getProfile(profileID);
应该可以正常工作,因为它也用于创建配置文件,我没有看到任何问题。
因为我总是从 getSingleProfileOrg(profileKey, orgID); 我最终得到重复的子实体。