java.lang.IllegalStateException :محاولة إنشاء اقترانات متعددة على متغيرات الفئة

StackOverflow https://stackoverflow.com//questions/9677078

سؤال

أول مشاركة هنا، آمل أن يتمكن شخص ما من إلقاء بعض الضوء على مشكلة كنت أحاول التوفيق بينها...

كجزء من مشروع مدرسي، نحاول إنشاء واجهة لعرض النقاط على الخريطة والمسارات على الخريطة.

في سباقنا الأول، تمكنت من العمل على تخزين/استرداد العناصر باستخدام 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 تمامًا حيث حدث الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top