Google App Engine、JDO和equals/hashCode

10

我在Google App Engine上有一个应用程序,一切正常。我意识到我的一个JDO增强对象没有实现equals和hashCode方法(我需要在集合中使用该对象)。于是我实现了它们。实际上,在这些实现中我并没有做什么特别的事情,我只是使用Eclipse生成了它们,像这样:

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

现在,当我尝试访问应用程序中的任何URL时,会抛出以下异常:

/addUser javax.jdo.JDOUserException: 持久类 "Class com.bpapa.myapp.domain.User" 似乎没有被增强。您可能需要重新运行增强器并检查输出中的错误。该类在数据库中没有表,但操作需要它。请检查此类的元数据规范。 at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:427) at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:249) at com.bpapa.myapp.servlet.AddUserServlet.doPost(AddUserServlet.java:34)

有什么想法是我做错了什么?

4个回答

14

eclipse中的配置("运行datanucleus增强器" - 如上所述相关问题)

项目设置 -> Google -> App Engine -> ORM

将src路径“src /”更改为您的JDO类的确切“src //”路径


11

你是否已将Eclipse设置为自动运行Datanucleus增强器?如果尝试使用项目->清理功能清理项目,然后从头开始构建项目呢?


做清理固定的事情。 - bpapa

3

我也遇到了同样的问题,当我执行项目->清除操作时,在日志中看到了以下异常信息:

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

因此,我删除了:

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

从Eclipse项目中清理并重新构建后,一切都按预期开始工作。

你在哪个日志里看到的? - migueloop

0
我通过更新到最新版本的appengine java sdk解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接