2009-10-29 22 views
10

J'ai une application fonctionnant correctement dans Google App Engine. J'ai réalisé que l'un de mes objets JDO-enhanced que j'ai oublié d'implémenter est égal 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 j'ai juste utilisé Eclipse pour les générer. Comme si:Google App Engine, JDO et equals/hashCode

@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 je tente de frapper toutes les URL dans l'application, cette exception est jeté:

/addUser javax.jdo.JDOUserException: classe persistante « classe com. bpapa.myapp.domain.User ne semble pas avoir été amélioré. Vous pouvez réexécuter l'enhancer et vérifier les erreurs dans la sortie. " n'a pas de table dans la base de données, mais l'opération l'exige. Veuillez vérifier la spécification des méta-données pour cette classe. à org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException (NucleusJDOHelper.java:427) à org.datanucleus.jdo.JDOQuery.execute (JDOQuery.java:249) à com.bpapa.myapp.servlet.AddUserServlet.doPost (AddUserServlet.java:34)

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

Répondre

11

Avez-vous configuré Eclipse pour exécuter automatiquement l'enhancer datanucleus? Que se passe-t-il si vous essayez de nettoyer le projet avec project-> clean et que vous créez le projet à partir de zéro?

+0

Faire les choses fixes propres. – bpapa

14

Configuration dans Eclipse ("exécuter l'activateur de DataNucleus" - question connexe tel que discuté ci-dessus)

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

changement src Parh "src /" chemin vers le chemin exact « src // » de vos classes JDO

+0

Cela a vraiment fait l'affaire pour moi. 10x! –

+0

Merci cela a fonctionné pour moi aussi! – jmbouffard

+0

fonctionne comme un charme .. thanx ... –

3

je fait face au même problème, et quand je l'ai fait le projet -> Clean, j'ai vu 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."} 

Alors, je l'ai enlevé:

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

du projet Eclipse, nettoyé et re-construit, tout a commencé à travailler comme prévu.

+0

I quel journal avez-vous vu cela? – migueloop

0

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