Question

J'ai une application dans Google App Engine qui fonctionnait bien. J'ai réalisé que l'un de mes objets améliorés par JDO que j'avais oublié d'implémenter equals et hashCode (j'ai besoin d'utiliser l'objet dans un ensemble). Donc j'ai fait. Je n'ai vraiment rien fait de spécial dans ces implémentations, en fait, je viens d'utiliser Eclipse pour les générer. Comme si:

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

@Persistent
private String appleId;

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result
            + ((appleId == null) ? 0 : appleId.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    User other = (User) obj;
    if (appleId == null) {
        if (other.appleId != null)
            return false;
    } else if (!appleId.equals(other.appleId))
        return false;
    return true;
}

Alors maintenant, lorsque j'essaie de frapper une URL dans l'application, cette exception est levée:

  

/ addUser   javax.jdo.JDOUserException: La classe persistante "Classe com.bpapa.myapp.domain.User ne semble pas avoir été améliorée. Vous souhaiterez peut-être réexécuter l’amplificateur et rechercher les erreurs éventuelles dans la sortie. & Quot; n'a pas de table dans la base de données, mais l'opération le requiert. Veuillez vérifier les spécifications de MetaData pour cette classe.       à org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException (NucleusJDOHelper.java:427)       à org.datanucleus.jdo.JDOQuery.execute (JDOQuery.java:249)       à l'adresse com.bpapa.myapp.servlet.AddUserServlet.doPost (AddUserServlet.java:34)

Des idées sur ce que j'ai fait de travers?

Était-ce utile?

La solution

Avez-vous configuré Eclipse pour exécuter automatiquement l’amplificateur de datanucleus? Que faire si vous essayez de nettoyer le projet avec project - > clean, puis construisez le projet à partir de zéro?

Autres conseils

Configuration dans eclipse (problème lié au "améliorateur de datanucleus" décrit ci-dessus)

Paramètres du projet - > Google - > App Engine - > ORM

Modifiez src parh " src / " chemin vers l'exacte " src // " chemin de vos classes JDO

J'ai rencontré le même problème, et quand j'ai fait le projet - > Propre, j'ai vu l'exception suivante dans le journal:

{Caused by: org.datanucleus.exceptions.NucleusException: Plugin (Bundle) "org.datanucleus.store.appengine" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/C:/Documents%20and%20Settings/Administrator/workspace/Guestbook/war/WEB-INF/lib/datanucleus-appengine-1.0.8.final.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/C:/eclipse/plugins/com.google.appengine.eclipse.sdkbundle.1.4.2_1.4.2.v201102111811/appengine-java-sdk-1.4.2/lib/user/orm/datanucleus-appengine-1.0.8.final.jar."}

J'ai donc supprimé:

C:/Documents and Settings/Administrator/workspace/Guestbook/war/WEB-INF/lib/datanucleus-appengine-1.0.8.final.jar

du projet eclipse, nettoyé et reconstruit, tout a commencé à fonctionner comme prévu.

J'ai résolu ce problème en mettant à jour la dernière version de appengine java sdk.

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