我们将MongoDB与Spring数据结合使用,我们希望在某个集合中使用以下结构:
{
"_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"
}
}
}
Class TranslatableString:
public class TranslatableString {
@NotNull
@Size(min = 1)
private TreeMap<LanguageEnum, String> translations = new TreeMap<>();
public TranslatableString() {
// empty default constructor
.............
}
是否有可能通过使用Spring数据注释来忽略此属性? 我知道@Transient的存在,但这忽略了完整的&#34;名称&#34;属性及其内容..
感谢您的帮助!
答案 0 :(得分:0)
我认为你应该使用MongoConverter。
首先,你必须在Spring上下文中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;
}
}