Domanda

Ho un'app in Google App Engine che funzionava bene. Mi sono reso conto che uno dei miei oggetti potenziati con JDO che avevo dimenticato di implementare equals e hashCode (ho bisogno di usare l'oggetto in un set). Così ho fatto. Non ho fatto nulla di speciale in queste implementazioni, infatti ho usato Eclipse per generarle. In questo modo:

@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;
}

Quindi ora, quando provo a colpire qualsiasi URL nell'app, viene generata questa eccezione:

  

/ addUser   javax.jdo.JDOUserException: classe persistente " Class com.bpapa.myapp.domain.User non sembra essere stato migliorato. Potresti voler rieseguire il potenziatore e verificare la presenza di errori nell'output. & Quot; non ha una tabella nel database, ma l'operazione lo richiede. Controlla le specifiche dei MetaData per questa classe.       at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException (NucleusJDOHelper.java:427)       at org.datanucleus.jdo.JDOQuery.execute (JDOQuery.java:249)       su com.bpapa.myapp.servlet.AddUserServlet.doPost (AddUserServlet.java:34)

Qualche idea su cosa ho fatto di sbagliato?

È stato utile?

Soluzione

Hai eclissi impostato per eseguire automaticamente il potenziatore di datanucleus? Che cosa succede se provi a pulire il progetto con project- > clean e quindi a creare il progetto da zero?

Altri suggerimenti

Configurazione in eclipse (" esegui il datanucleus enhancer " - problema relativo come discusso sopra)

Impostazioni progetto - > Google - > App Engine - > ORM

Cambia src parh " src / " percorso dell'esatto " src // " percorso delle tue lezioni JDO

Ho affrontato lo stesso problema e quando ho fatto il Progetto - > Pulito, ho visto la seguente eccezione nel registro:

{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."}

Quindi, ho rimosso:

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

dal progetto eclipse, ripulito e ricostruito, tutto ha iniziato a funzionare come previsto.

Ho risolto questo problema aggiornando all'ultima versione di appengine java sdk.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top