2014-07-25 1 views
0

MongoDB에서 Spring 데이터를 사용하여 매우 동적 인 구성 데이터를 툴킷에 저장합니다. 이 Config 개체는 data 필드 (Object)와 함께 몇 개의 조직 필드로 구성됩니다. Config의 일부 인스턴스에서 data 개체는 데이터베이스 내에 "data.foo.bar"과 같이 더 깊게 중첩 된 하위 문서를 참조합니다.이 필드 이름은 아래의 getDataField()으로 설정됩니다. 그들은 데이터베이스로 전송하고 이러한 Config 객체 조작, 그래서 저장 코드는 다음과 같이 보입니다 :스프링 데이터 부분 형식이 형식 정보를 유지하지 않음

MongoTemplate template; // This is autowired into the class. 
Query query; // This is the same query which (successfully) finds the object. 
Config myConfig; // The config to create or update in Mongo 

Update update = new Update() 
    .set(getDataField(), myConfig.getData()) 
    .set(UPDATE_TIME_FIELD, new Date()) 
    .setOnInsert(CREATE_TIME_FIELD, new Date()) 
    .setOnInsert(NAME_FIELD, myConfig.getName()); 

template.upsert(query, update, Config.class); 

봄이 반복적으로 정확하게 DBObjectdata 객체 변환을하지만, 데이터 문서 나의도의 하위 문서에 "_class" 필드가 있습니다. 결과적으로, 그들은 올바르게 직렬화하지 않는다.

이러한 문제는 이전에 DATAMONGO-392, DATAMONGO-407 및 DATAMONGO-724에보고 된 것과 매우 비슷하게 보입니다. 그러나 그것들은 모두 수정되었습니다. (spring-data-mongodb 1.4.2.RELEASE를 사용하고 있습니다.)

내가 잘못하고 있습니까? 이것이 Spring 문제 일 가능성이 있습니까?

+0

설명하면 실제로 잘못 될 수 있습니다. "올바르게 deserialize하지 않음"은 무엇을 의미합니까? –

+0

데이터 필드에 "_class"필드가없고 Object 유형의 Java 필드에 매핑되었으므로 매퍼는 데이터 객체가 원래 비 직렬화 된 유형을 유추 할 수 없습니다. 디폴트에서는 Map 가되어, 원의 형태로서 사용할 수 없습니다. 사실 데이터 필드를 upsert에 설정하기 전에 DBObject로 변환하는 해결 방법을 찾았으므로 더 이상 중요하지 않습니다. 합법적 인 스프링 문제 일 수 있다고 우려된다면, 계속해서 정보를 제공해 드리겠습니다. 응답 해 주셔서 감사합니다. –

답변

0

비슷한 문제가 있습니다. 한 가지 해결책은 자신의 Converter for Config.class를 작성하는 것입니다.

관련 문제