2012-03-13 4 views
0

最初のポストの変数に複数の関連付けを作成しようと、誰かが、おそらく私が両立しようとしてきた問題にいくつかの光を当てることができ望ん...java.lang.IllegalStateException:の一環として、ここではクラス

地図上のポイントと地図上のパスを表示するためのインターフェースを構築しようとしています。

私たちの最初のスプリントでは、私はObjectifyを使用してアイテムの保管/取り出しを行うことができました。

今、私たちは来春の機能を拡張しようとしています。 MapPath型のオブジェクトを格納しようとすると問題が発生しました(MapPathとMapDataの2つのデータ型はどちらもクラス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

+0

回答に合っているとフラグを付けてください:-) – stickfigure

0

com.teamrawket.server.MapDataは、MapDataファイルの名前をfullPathといいます。最後のnameは、MapDataクラスのString nameフィールドを参照しています。この全体の例外は、その特定のfullPathの参照が既に含まれていることを伝えようとします。 同じfullPathが既に登録されている別のオブジェクトがあるとします。 59行目が正確にどこにエラーが発生したのかを知ることは役に立ちます。

+0

@en len行59は、DataService.storeSingleton(pd)を参照しています。 – geogaddi

関連する問題