Je développe du code pour le moteur d'application. J'ai essayé de mettre à jour une ligne existante en mettant à jour la même entité renvoyée à la suite de la requête. Mais cela crée une nouvelle ligne au lieu de mettre à jour la même ligne. Voici le code:

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);
}
}

L'image suivante montre les champs de l'entité. entrez la description de l'image ici

Veuillez me faire savoir comment puis-je résoudre le problème.

0
Swapnil Chaudhari 30 déc. 2015 à 21:36

2 réponses

Meilleure réponse

J'ai résolu le problème. C'etait mon erreur. J'avais appelé le servlet saveData au lieu du servlet updateProfile.

0
Swapnil Chaudhari 1 janv. 2016 à 07:59

Mes compétences en Java ne sont pas très bonnes, je trouve donc difficile de comprendre votre exemple de code. Je ne vois pas non plus où updateProfile() est appelé et comment votre code obtient ou construit l'objet de profil, en particulier si la clé de l'objet de profil est modifiée.

Mais en général, si de nouvelles entités sont créées au lieu de mettre à jour des entités existantes, la raison en est que la clé lors de votre validation de mise à jour est différente de la clé réelle de l'entité existante.

Situations typiques:

  • une chaîne (nom-clé) est utilisée à la place d'un entier (ID), ou vice versa
  • une faute de frappe dans le gentil nom de la clé
  • différents espaces de noms ou propriétés d'application de la clé
  • les parents manquent dans le chemin clé ou sont mal construits

Suggestion:

Dans le visualiseur de banque de données, comparez la clé d'une entité existante avec la clé de l'entité créée accidentellement. La différence entre les deux clés peut vous indiquer où chercher dans votre code le bogue.

0
Ani 30 déc. 2015 à 23:26