Google App Engine, JDO y equals / hashCode
-
10-07-2019 - |
Pregunta
Tengo una aplicación en Google App Engine que funcionaba bien. Me di cuenta de que uno de mis objetos mejorados con JDO que olvidé implementar equals y hashCode (necesito usar el objeto en un conjunto). Así que lo hice. Realmente no hice nada especial en estas implementaciones, de hecho, solo usé Eclipse para generarlas. Me gusta así:
@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;
}
Entonces, cuando trato de presionar cualquier URL en la aplicación, se lanza esta excepción:
/ addUser javax.jdo.JDOUserException: clase persistente " Clase com.bpapa.myapp.domain.User no parece haber sido mejorada. Es posible que desee volver a ejecutar el potenciador y verificar si hay errores en la salida. & Quot; no tiene una tabla en la base de datos, pero la operación lo requiere. Verifique la especificación de MetaData para esta clase. en org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException (NucleusJDOHelper.java:427) en org.datanucleus.jdo.JDOQuery.execute (JDOQuery.java:249) en com.bpapa.myapp.servlet.AddUserServlet.doPost (AddUserServlet.java:34)
¿Alguna idea sobre lo que hice mal?
Solución
¿Tiene el eclipse configurado para ejecutar automáticamente el potenciador del núcleo de datos? ¿Qué sucede si intenta limpiar el proyecto con project- > clean y luego construye el proyecto desde cero?
Otros consejos
Configuración en eclipse (" ejecute el problema relacionado con el potenciador del núcleo de datos " como se discutió anteriormente)
Configuración del proyecto - > Google - > App Engine - > ORM
Cambiar src parh " src / " ruta a la " src // " exacta ruta de sus clases JDO
Me enfrenté al mismo problema, y ??cuando hice el Proyecto - > Limpio, vi la siguiente excepción en el 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."}
Entonces, eliminé:
C:/Documents and Settings/Administrator/workspace/Guestbook/war/WEB-INF/lib/datanucleus-appengine-1.0.8.final.jar
del proyecto eclipse, limpiado y reconstruido, todo comenzó a funcionar como se esperaba.
Resolví este problema actualizando a la última versión de appengine java sdk.