2016-07-22 1 views
0

Je peux enregistrer une entité disposant du champ LocalDateTime dans la banque de données. Cependant, J'essaie d'interroger sur une entité qui a le champ LocalDateTime. Lorsque je crée une requête et appeler la méthode asList, l'exception est levée ci-dessous:Impossible de créer une requête sur une entité disposant du champ LocalDateTime sur MongoDB

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

Répondre

0

Morphia repose sur le constructeur par défaut lorsque les entités de cartes de MongoDB à un des objets Java, en tant que classe java.time.LocalDateTime n'ont pas celui-là jette l'exception.

Vous pouvez utiliser l'annotation du cycle de vie @PreLoad pour convertir les données comme suit:

@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

Il n'y a pas actuellement en charge Java 8 Date/time dans Morphia. Il y a un nouveau module actuellement en révision de code qui ajoutera ce support dans la version 1.3, j'espère.