Google App Engine, JDO и equals / hashCode

У меня есть приложение в Google App Engine, которое работает нормально. Я понял, что один из моих 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;
}

Итак, теперь, когда я пытаюсь перейти по любому URL-адресу в приложении, возникает это исключение:

/ addUser javax.jdo.JDOUserException: постоянный класс «Похоже, что класс com.bpapa.myapp.domain.User не был улучшен. Вы можете повторно запустить средство улучшения и проверить наличие ошибок в выводе». не имеет таблицы в базе данных, но этого требует операция. Пожалуйста, проверьте спецификацию метаданных для этого класса. в org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException (NucleusJDOHelper.java:427) в org.datanucleus.jdo.JDOQuery.execute (JDOQuery.java:249) в com.blet.java: : 34)

Есть идеи о том, что я сделал не так?


person bpapa    schedule 29.10.2009    source источник


Ответы (4)


У вас есть eclipse, настроенный на автоматический запуск усилителя datanucleus? Что, если вы попробуете очистить проект командой project-> clean, а затем построить проект с нуля?

person Peter Recore    schedule 29.10.2009
comment
Делать чистые фиксированные вещи. - person bpapa; 01.11.2009

Конфигурация в eclipse (проблема, связанная с "запуском усилителя данных", как описано выше)

Настройки проекта -> Google -> App Engine -> ORM

Измените путь src parh "src /" на точный путь "src //" ваших классов JDO

person prajith    schedule 13.12.2009

Я столкнулся с той же проблемой, и когда я сделал Project -> Clean, я увидел следующее исключение в журнале:

{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, почистил и перестроил, все заработало как положено.

person Satyajit Paul    schedule 05.04.2011
comment
Я в каком журнале ты это видел? - person migueloop; 06.03.2013

Я решил эту проблему, обновив appengine java sdk до последней версии.

person M-k    schedule 12.08.2013