java.lang.IllegalStateException :محاولة إنشاء اقترانات متعددة على متغيرات الفئة
-
12-12-2019 - |
سؤال
أول مشاركة هنا، آمل أن يتمكن شخص ما من إلقاء بعض الضوء على مشكلة كنت أحاول التوفيق بينها...
كجزء من مشروع مدرسي، نحاول إنشاء واجهة لعرض النقاط على الخريطة والمسارات على الخريطة.
في سباقنا الأول، تمكنت من العمل على تخزين/استرداد العناصر باستخدام Objectify - لقد سارت الأمور بشكل رائع!
نحاول الآن توسيع الوظائف لربيعنا القادم.تواجه الآن مشكلات أثناء محاولة تخزين كائن من النوع MapPath (لاحظ MapPath وMapData، وهما نوعان من البيانات لدينا، وكلاهما يوسع فئة البيانات).مقتطفات التعليمات البرمجية المختصرة كما يلي:
@Entity
public class Data extends JavaScriptObject
{
@Id
Long id;
private String name;
private String dataSet;
...getters and setters
}
@Subclass
public class MapData extends Data implements Serializable{
{
private String name;
private String address;
private String dataSet;
@Embedded
private Coordinate location;
....constructors, getters/setters
}
@Subclass
public class PathData extends Data implements Serializable{
private String name;
private String address;
private String dataSet;
@Embedded
private Coordinate[] path;
...etc
}
الآن آمل أنني لم أفقدك بعد.لدي فئة DataService التي تتعامل بشكل أساسي مع جميع المعاملات.لدي اختبار الوحدة التالية:
@Test
public void storeOnePath(){
PathData pd = new PathData();
pd.setName("hi");
DataService.storeSingleton(pd);
Data d = DataService.getSingleton("hi");
assertEquals(pd,d);
}
تنفيذ getSingleton هو كما يلي:
public static void storeSingleton(Data d){
Objectify obj = ObjectifyService.begin();
obj.put(d);
}
JUnit يشكو:
java.lang.ExceptionInInitializerError
at com.teamrawket.tests.DataTest.storeOnePath(DataTest.java:59)
...<taken out>
Caused by: java.lang.IllegalStateException: Attempting to create multiple associations on class com.teamrawket.server.MapData for name
at com.googlecode.objectify.impl.Transmog$Visitor.addRootSetter(Transmog.java:298)
at com.googlecode.objectify.impl.Transmog$Visitor.visitField(Transmog.java:231)
at com.googlecode.objectify.impl.Transmog$Visitor.visitClass(Transmog.java:134)
at com.googlecode.objectify.impl.Transmog.<init>(Transmog.java:319)
at com.googlecode.objectify.impl.ConcreteEntityMetadata.<init>(ConcreteEntityMetadata.java:75)
at com.googlecode.objectify.impl.Registrar.registerPolymorphicHierarchy(Registrar.java:128)
at com.googlecode.objectify.impl.Registrar.register(Registrar.java:62)
at com.googlecode.objectify.ObjectifyFactory.register(ObjectifyFactory.java:209)
at com.googlecode.objectify.ObjectifyService.register(ObjectifyService.java:38)
at com.teamrawket.server.DataService.<clinit>(DataService.java:20)
... 27 more
ما الذي تفعله بالضبط "محاولة إنشاء ارتباطات متعددة في الفصل ...للاسم" يعني؟
آسف على المنشور الطويل وأي مشاكل في التنسيق قد تنشأ.
المحلول
لديك أسماء الحقول المتكررة في الفئات الفرعية الخاصة بك.يجب أن لا تعلن "الاسم" و "DataSet" في كل من الفائضين والفئات الفئة الفرعية؛قم بإزالة هذه الحقول من Mapdata و PathData ويجب أن تكون على ما يرام.
نصائح أخرى
com.teamrawket.server.MapData
بالعودة الى fullPath
اسم لملف MapData الخاص بك.ال name
في النهاية يشير إلى الميدان String name
في فئة MapData الخاصة بك.يحاول هذا الاستثناء بالكامل إخبارك أنه يحتوي بالفعل على مرجع لهذا المحدد fullPath
.أود أن أقول أن هناك كائن آخر بنفس الشيء fullPath
مسجلة بالفعل.سيكون من المفيد معرفة مكان السطر 59 تمامًا حيث حدث الخطأ.