I am able to persist an object and have SringSource re-create the object from the database if all the member variables are primitive types. This holds true if the names of the @PersistenceConstructor arguments don't match exactly the names of the member variables - in this case they an be matched up by using the @Field("foo") and @Value("#root.foo") annotations. However, I get a MappingInstantiationException when I try to persist objects that contain other objects using the @PersistenceConstructor.
According to Oliver Gierke:
You seem to have found a bug. The value resulting from the first Spel expression evaluation is a DBObject and not actually translated into the parameter type. I've already have some code here locally that fixes that. Would you mind creating a ticket against Spring Data MongoDB to file this as a bug?