Google App Engine ، JDO و يساوي/hashCode
-
10-07-2019 - |
سؤال
لقد حصلت على التطبيق في Google App Engine والتي تعمل بشكل جيد.أدركت أن واحدة من بلدي JDO-تعزيز الكائنات التي نسيت أن تنفيذ يساوي 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;
}
حتى الآن, عندما كنت في محاولة لضرب أي عناوين في تطبيق هذا الاستثناء يحصل ألقيت:
/addUser javax.jdo.JDOUserException:استمرار "الطبقة com.bpapa.اسم التطبيق.المجال.المستخدم لا يبدو أن قد تعززت.قد تحتاج إلى إعادة تشغيل محسن و التحقق من الأخطاء في الإخراج." لا يوجد جدول في قاعدة البيانات ، ولكن العملية تتطلب ذلك.يرجى التحقق من مواصفات البيانات الوصفية لهذه الفئة.في org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:427) في org.datanucleus.jdo.JDOQuery.تنفيذ(JDOQuery.java:249) في com.bpapa.اسم التطبيق.بريمج.AddUserServlet.doPost(AddUserServlet.java:34)
أي أفكار على ما فعلته خطأ ؟
المحلول
هل وضعت كسوف للتشغيل تلقائيا محسن datanucleus؟ ماذا لو حاول تنظيف المشروع مع على المشاريع> نظيفة ومن ثم إنشاء المشروع من الصفر؟
نصائح أخرى
التكوين في الكسوف ("تشغيل datanucleus محسن" ذات الصلة المسألة كما ذكر أعلاه)
المشروع إعدادات -> جوجل> App Engine -> ORM
تغيير src parh "src/" الطريق إلى الدقيق "src//" مسار JDO الطبقات
وأنا واجهت نفس المشكلة، وعندما فعلت المشروع -> نظيفة، ورأيت بعد استثناء في السجل:
{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
ومن المشروع الكسوف وتنظيفها وإعادة بناؤها، بدأ كل شيء يعمل كما هو متوقع.
وأنا حل هذه المشكلة عن طريق تحديث إلى الإصدار الأحدث من الإستراحة إلى AppEngine جافا.