2014-04-04 53 views
0

我們使用MongoDB的使用Spring的數據,我們想有下面的結構有一定收藏:MongoDB - Spring數據 - 如何忽略Map的屬性名稱?

{ 
"_id" : ObjectId("533e525bbd40c5da7cd8c3f0"), 
"_class" : "net.someClass.SomeClass", 
"source_id" : "other_id", 
"name" : { 
    "NL" : "iets", 
    "FR" : "quelque chose" 
    } 
} 

但由於這樣的事實,我們的「名」是一個自定義類「TranslatableString」,其中包含了屬性TreeMap中,MongoDB是表示之間的電平:

{ 
"_id" : ObjectId("533e525bbd40c5da7cd8c3f0"), 
"_class" : "net.someClass.SomeClass", 
"source_id" : "other_id", 
"name" : { 
    "translations" : { 
     "NL" : "iets", 
     "FR" : "quelque chose" 
     } 
    } 
} 

類TranslatableString:

public class TranslatableString { 

@NotNull 
@Size(min = 1) 
private TreeMap<LanguageEnum, String> translations = new TreeMap<>(); 

public TranslatableString() { 
    // empty default constructor 
............. 
} 

是否有一個通過使用Spring數據註釋來忽略此屬性的可能性? 我知道@Transient的存在,但這是忽略完整的「名稱」屬性,它的內容。

感謝您的幫助!

回答

0

我想,你應該使用MongoConverter。

首先,您必須在春季環境中使用configure the MongoConverter

因此,您需要兩個轉換器:一個用於在數據庫中存儲對象,另一個用於從數據庫中查詢文檔。類似的東西:

1)ReadConverter

public class SomeClassReadConverter implements Converter<DBObject, SomeClass> { 

    public SomeClass convert(DBObject source) { 
    SomeClass obj = new SomeClass(); 
     //do something... 
    TranslatableString nameObj = new TranslatableString(); 
    nameObj.setTranslations((Map) source.get("name")); 
    obj.setName(nameObj); 
     //do something... 
    return obj; 
    } 

} 

2)WriteConverter

public class SomeClassWriteConverter implements Converter<SomeClass, DBObject> { 

    public DBObject convert(SomeClass source) { 
    DBObject dbo = new BasicDBObject(); 
     // do something... 
    dbo.put("name", source.getName().getTranslations()); 
     // do something... 
    return dbo; 
    } 

}