第一次在这里发帖,希望有人能对我一直试图解决的问题有所了解......
作为学校项目的一部分,我们正在尝试构建一个界面来显示地图上的点和地图上的路径。
在我们的第一个 sprint 中,我设法使用 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
“试图在类上创建多个关联......名称”到底意味着什么?
对不起,很长的帖子和可能出现的任何格式问题。