2009-10-29 16 views
10

मुझे Google App Engine में एक ऐप मिला है जो ठीक काम कर रहा था। मुझे एहसास हुआ कि मेरी जेडीओ-एन्हांस्ड ऑब्जेक्ट्स में से एक जो मैं बराबर और हैशकोड को लागू करना भूल गया था (मुझे ऑब्जेक्ट को एक सेट में उपयोग करने की आवश्यकता है)। तो मैंने किया। मैंने वास्तव में इन कार्यान्वयन में कुछ भी विशेष नहीं किया, वास्तव में मैंने उन्हें उत्पन्न करने के लिए ग्रहण का उपयोग किया। इसलिए जैसा:Google ऐप इंजन, जेडीओ, और बराबर/हैशकोड

@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: लगातार वर्ग "वर्ग कॉम। 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

क्या आपके पास ग्रहणशीलता बढ़ाने वाले स्वचालित रूप से चलाने के लिए ग्रहण सेट है? क्या होगा यदि आप परियोजना के साथ परियोजना की सफाई करने की कोशिश करें-> साफ करें और फिर परियोजना को खरोंच से बनाएं?

+0

स्वच्छ निश्चित चीजें करना। – bpapa

14

ग्रहण में विन्यास ("datanucleus बढ़ाने चलाने" - जैसा कि ऊपर चर्चा संबंधित समस्या)

परियोजना सेटिंग्स -> गूगल -> App इंजन -> ORM

बदलें src parh "src /" अपने JDO वर्गों की सही "src //" पथ के लिए पथ

+0

वास्तव में मेरे लिए चाल है। 10x! –

+0

धन्यवाद यह मेरे लिए भी काम करता है! – jmbouffard

+0

एक आकर्षण की तरह काम करता है .. thanx ... –

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 

ग्रहण परियोजना से, साफ किया और फिर से बनाया गया है, सब कुछ उम्मीद के रूप में काम करना शुरू किया।

+0

मैं तुमने क्या लॉग देखा? – migueloop

0

मैंने एपेंगेन जावा एसडीके के नवीनतम संस्करण को अपडेट करके इस समस्या को हल किया।