Google App Engine, JDO et equals / hashCode

J’ai une application dans Google App Engine qui fonctionnait bien. J’ai réalisé que l’un de mes objects améliorés par JDO que j’avais oublié d’implémenter equals et hashCode (j’ai besoin d’utiliser l’object 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. Ainsi:

@PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private Ssortingng 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, quand j’essaye de bash n’importe quelle URL dans l’application, cette exception est levée:

/ addUser javax.jdo.JDOUserException: La classe persistante “La 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 des erreurs dans la sortie.” n’a pas de table dans la firebase database, mais l’opération le requirejs. Veuillez vérifier les spécifications de MetaData pour cette classe. Il est en ce moment même en train de se retrouver.L’expérience est la même chose. : 34)

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

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?

Configuration dans eclipse (problème lié à “exécuter l’exécutif de datanucleus” comme indiqué ci-dessus)

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

Remplacez le chemin “src /” par src par le chemin “src //” exact de vos classes JDO

J’ai rencontré le même problème, et quand j’ai fait le projet -> Nettoyer, 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."} 

Alors j’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 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.