2009-10-29 3 views
10

У меня есть приложение в Google App Engine, которое отлично работает. Я понял, что один из моих объектов с улучшенными JDO, которые я забыл реализовать равными и hashCode (мне нужно использовать объект в наборе). Так я и сделал. Я не делал ничего особенного в этих реализациях, на самом деле я просто использовал Eclipse для их создания. Как так:Google App Engine, JDO и equals/hashCode

@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 класс «Класс ком. 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)

Любые идеи о том, что я сделал не так?

ответ

11

У вас есть затмение для автоматического запуска энхансера datanucleus? Что делать, если вы попытаетесь очистить проект с помощью проекта-> чистый, а затем скомпилировать проект?

+0

Выполнение чистых фиксированных вещей. – bpapa

14

конфигурации в затмении ("запустить DataNucleus энхансер" - связанный с этим вопрос, как обсуждалось выше)

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

Изменить ЦСИ parh "SRC /" путь к точному «ЦСИ» // путь ваших классов JDO

+0

Это действительно трюк для меня. 10x! –

+0

Спасибо, что это сработало и для меня! – jmbouffard

+0

работает как очарование .. thanx ... –

3

Я столкнулся с той же проблемой, и когда я сделал проект -> 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, очистить и вновь построены, все начали работать, как ожидалось.

+0

Я в каком журнале вы это видели? – migueloop

0

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

Смежные вопросы