Google App Engine, JDO 및 Equals/Hashcode
-
10-07-2019 - |
문제
Google App Engine에 잘 작동하는 앱이 있습니다. 나는 equals와 해시 코드를 구현하는 것을 잊어 버린 JDO가 강화 된 개체 중 하나를 깨달았습니다 (세트에서 객체를 사용해야합니다). 그래서 나는했다. 나는 이러한 구현에서 특별한 일을하지 않았다. 사실 나는 방금 이클립스를 사용하여 그것들을 생성했다. 그렇게 :
@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 (org.datanucleus.jdo.jdoquery.jdoquery.execute (jdoquery.java:249) at com.bpapa.myapp.servlet.servlet.servlet. : 34)
내가 잘못한 것에 대한 아이디어가 있습니까?
해결책
Datanucleus Enhancer를 자동으로 실행할 Eclipse 세트가 있습니까? 프로젝트-> 청소로 프로젝트 청소를 시도한 다음 처음부터 프로젝트를 구축하면 어떻게해야합니까?
다른 팁
Eclipse의 구성 ( "Datanucleus Enhancer 실행" - 위에서 설명한 관련 문제)
프로젝트 설정 -> Google-> App Engine-> ORM
JDO 클래스의 정확한 "SRC //"경로로 SRC PARH "SRC/"경로 변경
나는 같은 문제에 직면했고 프로젝트를했을 때 -> 청소를했을 때 로그에서 다음과 같은 예외를 보았습니다.
{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로 업데이트 하여이 문제를 해결했습니다.