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);
봄이 반복적으로 정확하게 DBObject
에 data
객체 변환을하지만, 데이터 문서 나의도의 하위 문서에 "_class"
필드가 있습니다. 결과적으로, 그들은 올바르게 직렬화하지 않는다.
이러한 문제는 이전에 DATAMONGO-392, DATAMONGO-407 및 DATAMONGO-724에보고 된 것과 매우 비슷하게 보입니다. 그러나 그것들은 모두 수정되었습니다. (spring-data-mongodb 1.4.2.RELEASE를 사용하고 있습니다.)
내가 잘못하고 있습니까? 이것이 Spring 문제 일 가능성이 있습니까?
설명하면 실제로 잘못 될 수 있습니다. "올바르게 deserialize하지 않음"은 무엇을 의미합니까? –
데이터 필드에 "_class"필드가없고 Object 유형의 Java 필드에 매핑되었으므로 매퍼는 데이터 객체가 원래 비 직렬화 된 유형을 유추 할 수 없습니다. 디폴트에서는 Map가되어, 원의 형태로서 사용할 수 없습니다. 사실 데이터 필드를 upsert에 설정하기 전에 DBObject로 변환하는 해결 방법을 찾았으므로 더 이상 중요하지 않습니다. 합법적 인 스프링 문제 일 수 있다고 우려된다면, 계속해서 정보를 제공해 드리겠습니다. 응답 해 주셔서 감사합니다. –