10

Google App Engine で正常に動作するアプリを入手しました。equals と hashCode を実装するのを忘れていた JDO 拡張オブジェクトの 1 つに気付きました (オブジェクトをセットで使用する必要があります)。だから私はしました。これらの実装で特別なことは何もしていません。実際、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: Persistent class "クラス com.bpapa.myapp.domain.User は拡張されていないようです。エンハンサーを再実行して、出力のエラーを確認してください。" データベースにテーブルがありませんが、操作にはテーブルが必要です。このクラスの MetaData の仕様を確認してください。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)

私が間違ったことについてのアイデアはありますか?

4

4 に答える 4

14

Eclipse での構成 (「datanucleus エンハンサーを実行する」 - 上記で説明した関連する問題)

プロジェクト設定 -> Google -> App Engine -> ORM

src parh "src/" パスを、JDO クラスの正確な "src//" パスに変更します

于 2009-12-13T03:25:48.440 に答える
11

datanucleus エンハンサーを自動的に実行するように Eclipse を設定していますか? project->clean でプロジェクトをクリーンアップしてから、プロジェクトを最初からビルドするとどうなりますか?

于 2009-10-29T06:07:42.827 に答える
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プロジェクトから、クリーニングと再構築が行われ、すべてが期待どおりに機能し始めました。

于 2011-04-05T03:12:46.723 に答える
0

appengine Java SDK の最新バージョンに更新することで、この問題を解決しました。

于 2013-08-12T08:46:59.080 に答える