मॉर्फिया मानचित्र को एक एम्बेडेड वर्ग के रूप में देखने और दस्तावेज़ के रूप में मानने के बजाय किसी अन्य दस्तावेज़ के डीबी संदर्भ के रूप में देखता है। इसका समाधान मैप @एम्बेडेड को एनोटेट करना होगा, लेकिन यह संभव नहीं है क्योंकि आप मैप क्लास को एडिट नहीं कर सकते।
एक अन्य वर्ग बनाकर और मानचित्र को इस वर्ग की संपत्ति के रूप में परिभाषित करके और इसे @Embedded के रूप में एनोटेट करके आप जो प्रयास कर रहे हैं, उसके समान कुछ हासिल करने का एक तरीका है।
Temp वर्ग बदलें:
public class Temp {
@Id String _id;
@Embedded // CHANGE HERE
List<MapProxy> strings; // CHANGE HERE
public Temp(){
strings=new LinkedList<MapProxy>(); // CHANGE HERE
}
public static void main(String...args) throws UnknownHostException, MongoException{
Mongo mongo=null;
Morphia morphia=null;
Datastore ds=null;
mongo = new Mongo();
morphia = new Morphia();
morphia.map(Temp.class);
ds = morphia.createDatastore(mongo, "test2");
Temp t = new Temp();
t._id ="hi";
MapProxy mp = new MapProxy(); // CHANGE HERE
mp.m.put("Hi","1"); // CHANGE HERE
mp.m.put("Hi2",2); // CHANGE HERE
t.strings.add(mp); // CHANGE HERE
ds.save(t);
t=ds.get(t);
ds.ensureIndexes();
}
}
और एक नया वर्ग बनाएं:
@Embedded
public class MapProxy {
public Map<String,Object> m = new HashMap<String, Object>();
}
मैंने अपने द्वारा किए गए परिवर्तनों को चिह्नित कर लिया है।
यह जो संरचना पैदा करता है वह इस प्रकार है:
{
"_id" : "hi",
"className" : "YOUR CLASS NAME HERE",
"strings" :
[ {
"m" :
{
"Hi" : "1" ,
"Hi2" : 2
}
} ]
}