[英]Appengine entity update not working
我正在为App Engine开发代码。 我试图通过更新作为查询结果返回的相同实体来更新现有行。 但是它创建新行而不是更新同一行。 以下是代码:
public boolean updateProfile(DbProfile profile) {
Transaction txn = _datastore.beginTransaction();
Entity entity = getProfileEntity(profile.getLoginId());
if (entity != null) {
entity.setProperty(DbProfile.DbProfilePropertyNames.address, profile.getAddress());
entity.setProperty(DbProfile.DbProfilePropertyNames.name, profile.getName());
Key key = _datastore.put(entity);
txn.commit();
return true;
}
return false;
}
private Entity getProfileEntity(String userName) {
Key eRecommendationKey = KeyFactory.createKey("eRecommendation", _dbKeyName);
FilterPredicate predicateUsername =
new FilterPredicate(DbProfile.DbProfilePropertyNames.loginId, FilterOperator.EQUAL,
userName.toUpperCase());
Query query =
new Query(DbProfile.entityProfileName, eRecommendationKey).setFilter(predicateUsername);
List<Entity> profiles =
_datastore.prepare(query).asList(FetchOptions.Builder.withDefaults());
Utils.log.log( Level.SEVERE, "not found"+profiles.size() );
if (profiles.size() == 0) {
//profile data is not set yet
return null;
} else {
return profiles.get(0);
}
}
请让我知道如何解决此问题。
我的Java技能不是很好,所以我很难理解您的代码示例。 我也看不到在哪里调用updateProfile()
以及代码如何获取或构造配置文件对象,尤其是是否更改了配置文件对象的键。
但是通常,如果创建新实体而不是更新现有实体,则原因是更新提交时的密钥不同于现有实体的实际密钥。
典型情况:
建议:
在数据存储查看器中,将现有实体的密钥与意外创建的实体的密钥进行比较。 两个键之间的差异可能会提示您在代码中查找错误的位置。
我解决了问题。 是我的错 我曾叫saveData servlet而不是updateProfile servlet。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.