Google App Engine、JDO、およびequals / hashCode
-
10-07-2019 - |
質問
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:永続クラス" Class 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)で
私が間違ったことについてのアイデアはありますか?
解決
Datanucleusエンハンサーを自動的に実行するようにEclipseを設定していますか? project-> cleanを使用してプロジェクトをクリーンアップしてから、プロジェクトをゼロからビルドするとどうなりますか?
他のヒント
Eclipseでの構成(「datanucleusエンハンサーの実行」-上記の関連問題)
プロジェクト設定-> Google-> App Engine-> ORM
src parhを変更" src /"正確な" src //"へのパスJDOクラスのパス
私は同じ問題に直面しました、そして私がプロジェクトをしたとき->クリーン、ログに次の例外がありました:
{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プロジェクトから、クリーンアップおよび再構築され、すべてが期待どおりに動作し始めました。
私は、appengine java sdkの最新バージョンに更新することでこの問題を解決しました。