2016-07-22 14 views
0

Ich kann eine Entität speichern, die über das Feld LocalDateTime im Datenspeicher verfügt. Jedoch Ich versuche, eine Entität abzufragen, die LocalDateTime Feld hat. Wenn ich eine Abfrage und rufe asList Methode zu erstellen, wird die Ausnahme unten geworfen:Es kann keine Abfrage für eine Entität mit dem Feld LocalDateTime in MongoDB erstellt werden.

java.lang.RuntimeException: org.mongodb.morphia.mapping.MappingException: No usable constructor for java.time.LocalDateTime 

Antwort

0

Morphia stützt sich auf dem Standard-Konstruktor, wenn Karten Einheiten von MongoDB zu einem Java-Objekten, wie java.time.LocalDateTime Klasse haben nicht man wirft die Ausnahme auf.

können Sie @PreLoad Lifecycle Anmerkung verwenden, um Daten zu konvertieren, wie folgt:

@Entity 
public class MyEntity { 
    public MyEntity() { 

    } 

    @Id 
    private ObjectId id; 
    private LocalDateTime localDateTime; 

    @PreLoad 
    public void preLoad(DBObject obj) { 
     BasicDBObject object = (BasicDBObject) obj.get("localDateTime"); 
     BasicDBObject date = (BasicDBObject) object.get("date"); 
     BasicDBObject time = (BasicDBObject) object.get("time"); 
     localDateTime = LocalDateTime.of(date.getInt("year"), 
             date.getInt("month"), 
             date.getInt("day"), 
             time.getInt("hour"), 
             time.getInt("minute"), 
             time.getInt("second"), 
             time.getInt("nano")); 
     obj.removeField("localDateTime"); 
    } 
} 
0

es Unterstützung für Java 8 Datum/Zeit-Typen in Morphia derzeit nicht ist. Es gibt ein neues Modul, das sich derzeit in der Code-Überprüfung befindet und hoffentlich diese Unterstützung in der Version 1.3 hinzufügen wird.