问题
I'm trying to upgrade Morphia from .108 to 1.01 in some code I've inherited. There's a class that looks like:
@Entity(value="audit", noClassnameStored=true)
public class AuditEntry<T> {
@Id
private ObjectId id;
@Embedded
private Delta<T> delta;
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public Delta<T> getDelta() {
return this.delta;
}
public void setDelta(Delta<T> delta) {
this.delta = delta;
}
}
Then the embedded delta class:
@Embedded
public class Delta<T> {
private Map<String, Object> before;
private Map<String, Object> after;
private Delta() { }
public Delta(Map<String, Object> before, Map<String, Object> after) {
this.before = before;
this.after = after;
}
public void setBefore(Map<String, Object> before) {
this.before = before;
}
public Map<String, Object> getBefore() {
return (this.before == null ? Collections.<String, Object>emptyMap() : this.before);
}
public void setAfter(Map<String, Object> after) {
this.after = after;
}
public Map<String, Object> getAfter() {
return (this.after == null ? Collections.<String, Object>emptyMap() : this.after);
}
}
After upgrading the Morphia version, this now breaks during mapping as follows:
Caused by: org.mongodb.morphia.mapping.MappingException: A type could not be found for the field null.null
at org.mongodb.morphia.mapping.MappedField.discoverType(MappedField.java:211)
at org.mongodb.morphia.mapping.MappedField.<init>(MappedField.java:101)
at org.mongodb.morphia.mapping.EphemeralMappedField.<init>(EphemeralMappedField.java:36)
at org.mongodb.morphia.mapping.MappedField.discoverType(MappedField.java:189)
at org.mongodb.morphia.mapping.MappedField.discover(MappedField.java:117)
at org.mongodb.morphia.mapping.MappedField.<init>(MappedField.java:95)
at org.mongodb.morphia.mapping.MappedClass.discover(MappedClass.java:214)
at org.mongodb.morphia.mapping.MappedClass.<init>(MappedClass.java:145)
at org.mongodb.morphia.mapping.Mapper.addMappedClass(Mapper.java:163)
at org.mongodb.morphia.Morphia.map(Morphia.java:67)
at org.mongodb.morphia.Morphia.mapPackage(Morphia.java:114)
at org.mongodb.morphia.Morphia.mapPackage(Morphia.java:96)
The Delta
class seems unnecessarily generified, but I'm disinclined to change it, especially when it was working before and I was under the impression this is something Morphia supports. Why has this started breaking?
来源:https://stackoverflow.com/questions/32014115/morphia-mappingexception-a-type-could-not-be-found-for-field-null-null