Question

Je vois une question similaire dans problèmes lors de la sauvegarde d'un objet pré-persisté dans Google App Engine (Java) , et en effet, je ne demande pas close () sur mon gestionnaire de persistance. Cependant, je suis maintenant appel à close, mais ma mise à jour de l'objet n'est pas persévéré. Plus précisément, je veux supprimer un élément d'un ensemble, et sauver ce petit ensemble. Voici le gestionnaire de persistance code lié, qui ne jette pas une exception, mais ne pas enregistrer mes données:

    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();

    PersistenceManager pm = PMF.get().getPersistenceManager();
    UserProfileInfo userProfile = pm.getObjectById(UserProfileInfo.class,user.getUserId());
    int presize = userProfile.getAccounts().size();
    AccountInfo ai = userProfile.removeAccount(id);
    int postsize = userProfile.getAccounts().size();
    UserProfileInfo committed = (UserProfileInfo)pm.makePersistent(userProfile);
    int postcommitsize = committed.getAccounts().size();
    pm.close();

Et voici la partie pertinente de la classe UserProfileInfo:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
class UserProfileInfo {
  @Persistent
  private Set<AccountInfo> accounts;

public AccountInfo removeAccount(Long id) throws Exception {
    Iterator<AccountInfo> it = accounts.iterator();
    StringBuilder sb = new StringBuilder();
    while(it.hasNext()) {
        AccountInfo acctInfo = it.next();
        Long acctInfoId = acctInfo.getId();
        if(acctInfoId.equals(id)) {
            it.remove();
            return acctInfo;
        }
        sb.append(" ");
        sb.append(acctInfoId);
    }
    throw new Exception("Cannot find id " + id + " Tried " + sb.toString());
  }
}
Était-ce utile?

La solution

Il semble donc que la réponse est des objets appartenant ne peuvent pas utiliser une clé primaire long. L'activateur de DataNucleus m'a dit cela pour un autre type d'objet que j'ajouté. Je ne sais pas pourquoi il a sauté cet avertissement pour mon objet accountInfo.

Je suis passé ma clé vers une chaîne, et changé les annotations à utiliser correctement la chaîne, et maintenant je suis en mesure de supprimer de la collection.

Autres conseils

J'aurais pensé que la première chose à faire quoi que ce soit quand le débogage serait de regarder le journal (niveau DEBUG). Il vous indique quels états les objets sont les différents points. Alors quel état est-il lorsque vous appelez makePersistent ()? et après ? et ce qui se passe lorsque vous appelez pm.close () ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top