Ich habe eine App in Google App Engine, die gut funktionierte. Ich erkannte, dass eines meiner JDO-erweiterten Objekte, die ich zu implementieren vergaß, gleich und hashCode war (ich muss das Objekt in einem Set verwenden). So tat ich. Ich habe bei diesen Implementierungen eigentlich nichts Besonderes gemacht, ich habe Eclipse nur benutzt, um sie zu erzeugen. Wie so:Google App Engine, JDO und 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;
}
So, jetzt, wenn ich versuche, alle URLs in der App zu treffen, wird diese Ausnahme ausgelöst:
/addUser javax.jdo.JDOUserException: Persistent Klasse „Class com. bpapa.myapp.domain.User scheint nicht verbessert worden zu sein. Möglicherweise möchten Sie den Enhancer erneut ausführen und nach Fehlern in der Ausgabe suchen. " hat keine Tabelle in der Datenbank, aber die Operation erfordert es. Bitte überprüfen Sie die Spezifikation der MetaData für diese Klasse. bei org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException (NucleusJDOHelper.java:427) bei org.datanucleus.jdo.JDOQuery.execute (JDOQuery.java:249) bei com.bpapa.myapp.servlet.AddUserServlet.doPost (AddUserServlet.java:34)
Irgendwelche Ideen, was ich falsch gemacht habe?
Doing die sauberen festen Dinge. – bpapa