Shape rectangleLoaded = morphia.fromDBObject(Shape.class, rectangleDbObjLoaded, new DefaultEntityCache());
assertTrue(rectangle.getArea() == rectangleLoaded.getArea());
assertTrue(rectangleLoaded instanceof Rectangle);
ShapeShifter shifter = new ShapeShifter();
shifter.setReferencedShape(rectangleLoaded);
shifter.setMainShape(new Circle(2.2));
shifter.getAvailableShapes().add(new Rectangle(3,3));
shifter.getAvailableShapes().add(new Circle(4.4));
DBObject shifterDbObj = morphia.toDBObject(shifter);
shapeshifters.save(shifterDbObj);
BasicDBObject shifterDbObjLoaded = (BasicDBObject) shapeshifters.findOne(new BasicDBObject(Mapper.ID_KEY, shifterDbObj.get(Mapper.ID_KEY)));
ShapeShifter shifterLoaded = morphia.fromDBObject(ShapeShifter.class, shifterDbObjLoaded, new DefaultEntityCache());
assertNotNull(shifterLoaded);
assertNotNull(shifterLoaded.getReferencedShape());
assertNotNull(shifterLoaded.getReferencedShape().getArea());
assertNotNull(rectangle);
assertNotNull(rectangle.getArea());
assertTrue(rectangle.getArea() == shifterLoaded.getReferencedShape().getArea());
assertTrue(shifterLoaded.getReferencedShape() instanceof Rectangle);
assertTrue(shifter.getMainShape().getArea() == shifterLoaded.getMainShape().getArea());
assertEquals(shifter.getAvailableShapes().size(), shifterLoaded.getAvailableShapes().size());
}