первый пост здесь, в надежде, что кто-то может пролить свет на проблему, которую я пытался решить ...
В рамках школьного проекта мы пытаемся создать интерфейс для отображения точек на карте и путей на карте.
Для нашего первого спринта мне удалось отработать хранение / получение предметов с помощью 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);
}
Юнит жалуется:
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
Что именно означает "попытка создать несколько ассоциаций в классе ... для имени"?
Извините за длинный пост и любые проблемы с форматированием, которые могут возникнуть.