Google App Engine,JDO和equals / hashCode
-
10-07-2019 - |
题
我在谷歌应用引擎中有一个工作正常。我意识到我忘记实现的JDO增强对象中的一个等于和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;
}
现在,当我尝试点击应用中的任何网址时,会抛出此异常:
/ ADDUSER javax.jdo.JDOUserException:持久化类<!>“;类com.bpapa.myapp.domain.User似乎没有得到增强。您可能需要重新运行增强器并检查输出中的错误。<!> quot;数据库中没有表,但操作需要它。请检查此类的MetaData规范。 at 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)
关于我做错了什么的任何想法?
解决方案
你有eclipse设置自动运行datanucleus增强器?如果您尝试使用项目清理项目 - <!> gt;清理然后从头构建项目,该怎么办?
其他提示
在eclipse中配置(<!>“运行datanucleus enhancer <!>” - 如上所述的相关问题)
项目设置 - <!> gt; Google - <!> gt; App Engine - <!> gt; ORM
更改src parh <!>“src / <!>”;确切的<!>“src // <!>”的路径JDO类的路径
我遇到了同样的问题,当我做项目时 - <!> gt;干净,我在日志中看到以下异常:
{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解决了这个问题。