2017-09-27 5 views
1

_idが複合IDの場合は問題があります。その後、私はそれをMorphia Javaエンティティオブジェクトに変換することはできません。次のようにMongoDBに格納された複合IDをMorphia Javaエンティティオブジェクトに変換するにはどうすればよいですか?

私のMongoDBでJSONに見えます:

{ 
    "_id" : { 
     "id1" : "SAMPLE_ID1", 
     "id2" : "SAMPLE_ID2" 
    } 
} 

Javaコード:私はmorphia v1.3.2デベロッパーを使用しています

import org.mongodb.morphia.annotations.Id; 

@Entity(value = "MyCollection", noClassnameStored = true) 
public class MyObject { 

    @Id 
    private MyObjectId thisId; 

    //.... 
} 

public class MyObjectId{ 

    @Property("id1") 
    private String id1; 

    @Property("id2") 
    private String id2; 

    //..... 
} 

私はオブジェクトを挿入とき、私は次の例外を取得:

java.lang.RuntimeExceptionを:java.lang.ClassCastExceptionが:org.bson.types.ObjectIdはcom.mongodbにキャストすることはできません.DBObject at org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:76) at org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:850) at org.mongodb.morphia。 mapping.Mapper.updateKeyAndVersionInfo(Mapper.java:725) at org.mongodb.morphia.DatastoreImpl.postSaveOperations(DatastoreImpl.java:1422)(DatastoreImpl.java:1408) at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:1292) Javaの:org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:758) で775) .......

私はオブジェクトを選択、私は次の例外を取得します:

java.lang.RuntimeException:java.lang.ClassCastException:org.bson.types.ObjectId canno com.mongodb.DBObjectにキャストする 、org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:76) 、org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:850) org.mongodb.morphia.mapping.Mapper.fromDb(Mapper.java:282) at org.mongodb.morphia.mapping.Mapper.fromDBObject(Mapper.java:193) at org.mongodb.morphia.query.MorphiaIterator org.mongodb.morphia.query.MorphiaIterator.nextでorg.mongodb.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:146) (MorphiaIterator.java:117)で.convertItem(MorphiaIterator.java:134) (QueryImpl.java:147) ......

答えて

1

私は非常によく似た設定をしています。私は、引数なしのコンストラクタがマーシャリングのために必要だったことを思い出しているように見えるので、

@Entity(noClassnameStored = true) 
public class MyObjectId { 

    @Property("id1") 
    private String id1; 

    @Property("id2") 
    private String id2; 

    public MyObjectId() { 
    } 

    public MyObjectId(String id1, String id2) { 
    this.id1 = id1; 
    this.id2 = id2; 
    } 

} 

、あなたがする必要がありますすべてはMyObjectIdに@Entityを追加すると思います。

関連する問題