2009-10-29 130 views
10

我有一個應用程序在Google App Engine中工作正常。我意識到,我忘了實現equals和hashCode(我需要使用集合中的對象)的JDO增強對象。所以我做了。我在這些實現中並沒有做任何特別的事情,實際上我只是使用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:持久化類「類融爲一體。 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)

任何想法,我做錯了什麼?

回答

11

你有eclipse設置爲自動運行datanucleus增強?如果您嘗試使用project-> clean清理項目並從頭開始構建項目,該怎麼辦?

+0

做乾淨的固定的東西。 – bpapa 2009-11-01 04:06:01

14

配置在Eclipse( 「運行DataNucleus將增強」 - 相關的問題如上所述)

項目設置 - >谷歌 - >應用程序引擎 - > ORM

更改SRC parh 「的src /」路徑的JDO類的確切「SRC //」路徑

+0

這實際上爲我做了詭計。 10倍! – 2010-04-02 19:49:06

+0

感謝它也爲我工作! – jmbouffard 2011-03-03 16:39:56

+0

工程就像一個魅力.. thanx ... – 2013-04-01 08:30:43

3

我面臨同樣的問題,當我做的項目 - >乾淨,我看到在日誌中以下情況例外:

{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 2013-03-06 17:49:05

0

我通過更新到最新版本的appengine java sdk解決了這個問題。