代码之家  ›  专栏  ›  技术社区  ›  bpapa

google app engine、jdo和equals/hashcode

  •  10
  • bpapa  · 技术社区  · 15 年前

    我在谷歌应用引擎中有一个应用程序运行良好。我意识到我的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时,就会抛出这个异常:

    /加法器 javax.jdo.jdousexception:persistent class“class com.bpapa.myapp.domain.user似乎没有得到增强。您可能需要重新运行增强器并检查输出中的错误。“数据库中没有表,但操作需要它。请检查此类元数据的规范。 在Org.DATANNDUC.jdo.NuxujdoHelp.GejdodoExpReNuSueExpRead(NujasJodoHelp.java:427) 在Org.DATANCONDU.jdo.jdoQual.Exctudio(JdoQual.java:249) 在COM.BPAA.MyApp.servlet .AdvulServServ.DopOST(AdvServServlet,Java:34)

    对我做错了什么有什么看法吗?

    4 回复  |  直到 11 年前
        1
  •  11
  •   Peter Recore    15 年前

    是否将Eclipse设置为自动运行DataNucleus增强程序?如果您尝试用Project清理项目,然后从头开始构建项目,会怎么样?

        2
  •  14
  •   prajith    15 年前

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

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

    将SRC PARH“SRC/”路径更改为JDO类的确切“SRC/”路径

        3
  •  3
  •   Mr.Wizard naktepe    14 年前

    我也面临同样的问题,当我执行项目->清理时,在日志中看到以下异常:

    {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项目开始,清理并重新构建,一切都按预期开始工作。

        4
  •  0
  •   M-k    11 年前

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