谷歌应用程序引擎,JDO和等于/的hashCode(Google App Engine, JDO,

2019-09-02 03:25发布

我有在工作正常谷歌应用程序引擎的应用程序。 我意识到,一个上,我忘了实现equals和hashCode我JDO增强对象(我需要使用一组对象)。 所以我做了。 我真的没有做任何事情,在这些实施特殊的,其实我只是用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:持久化类“类com.bpapa.myapp.domain.User似乎并没有得到增强,您可能需要重新运行增强并为您在输出的错误。” 在数据库中没有表,但操作需要它。 请检查元数据这个类的规范。 在org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:427)在org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:249)在com.bpapa.myapp.servlet.AddUserServlet.doPost(AddUserServlet.java :34)

什么我做错了任何想法?

Answer 1:

你有日食设置为自动运行DataNucleus将增强? 如果你尝试清洗项目与项目 - >干净,然后从头开始构建这个项目?



Answer 2:

配置在Eclipse(“运行DataNucleus将增强” -相关的问题如上所述)

项目设置 - >谷歌 - >应用程序引擎 - > ORM

更改SRC parh“的src /”路径的JDO类的确切“SRC //”路径



Answer 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项目,清理和重新修建,一切开始工作正常。



Answer 4:

我通过更新到AppEngine上Java SDK的最新版本解决了这个问题。



文章来源: Google App Engine, JDO, and equals/hashCode