ここでの最初の投稿、誰かが私がジャグリングしようとしてきた問題に光を当てることができることを願っています...
学校のプロジェクトの一環として、地図上にポイントを表示し、地図上にパスを表示するためのインターフェースを構築しようとしています。
私たちの最初のスプリントでは、Objectifyを使用してアイテムの保存/取得を行うことができました-それはうまくいきました!
今、私たちは来年の春に向けて機能を拡張しようとしています。MapPath型のオブジェクトを格納しようとして問題が発生しました(2つのデータ型である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
「名前のために...クラスに複数の関連付けを作成しようとする」とは、正確には何を意味しますか?
長い投稿と発生する可能性のあるフォーマットの問題については申し訳ありません。