2012-03-13 70 views
0

第一篇文章在這裏類變量,希望有人能擺脫也許在某個問題上我一直在試圖玩弄一些輕...java.lang.IllegalStateException:試圖創建多個社團在

作爲的一部分我們正試圖構建一個界面來顯示地圖上的點和地圖上的路徑。

對於我們的第一次衝刺,我設法使用Objectify來存儲/檢索物品 - 它變得很棒!

現在我們正在努力擴展我們下一個春天的功能。現在嘗試存儲MapPath類型的對象時存在問題(請注意,我們的兩種數據類型MapPath和MapData都擴展了Data類)。簡短的代碼片段如下:

@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 

到底是什麼「試圖創建類的多個關聯...名字「暗示?

對不起,可能會出現較長的文章和任何格式問題。

回答

1

您在您的子類中有重複的字段名稱。你不應該在超類和子類中聲明'name'和'dataSet';從MapData和PathData中刪除這些字段,你應該沒問題。

+0

這是問題!謝謝。 – geogaddi 2012-03-13 02:10:09

+0

請將答案標記爲已接受:-) – stickfigure 2012-03-13 14:48:42

0

com.teamrawket.server.MapData指您的MapData文件的名稱爲fullPath。末尾的name指的是MapData類中的字段String name。這整個例外試圖告訴你,它已經包含了該具體的fullPath的參考。 我會說有另一個對象已經註冊了相同的fullPath。知道第59行與發生錯誤的位置完全相同將會很有幫助。

+0

@re len line 59引用DataService.storeSingleton(pd);致電 – geogaddi 2012-03-13 01:44:36