2017-09-27 12 views
1

_id이 복합 ID 인 경우 문제가 있습니다. 그런 다음 Morphia Java 개체로 변환 할 수 없습니다. 다음과 같이MongoDB에 저장된 복합 ID를 Morphia Java 개체로 변환하려면 어떻게해야합니까?

내 MongoDB의에서 JSON 보인다 :

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

자바 코드 : 나는 모르핀의 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)org.mongodb.morphia.DatastoreImpl.save에서 org.mongodb.morphia.DatastoreImpl.save (DatastoreImpl.java:1292) 에서 org.mongodb.morphia.DatastoreImpl.postSaveOperations (DatastoreImpl.java:1408) (DatastoreImpl에서 515,. 자바 : org.mongodb.morphia.DatastoreImpl.save (DatastoreImpl.java:758) 에서 775) .......

내가 객체를 선택

, 나는 다음과 같은 예외가 :

java.lang.RuntimeException : java.lang.ClassCastException : org.bson.types.ObjectId canno t는 org.mongodb.morphia.mapping.Mapper.readMappedField (Mapper.java:850)에서 org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject (EmbeddedMapper.java:76) 에서 com.mongodb.DBObject 에 캐스트 할 (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 (MorphiaIterator.java:117)에서 org.mongodb.morphia.query.MorphiaIterator.processItem (MorphiaIterator.java:146) 에서 .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를 추가 생각합니다.