2012-03-13 68 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