2012-12-20 4 views
1

Est-ce que quelqu'un sait si morphia prend en charge l'horodatage automatique pour créer/mettre à jour des documents dans une collection dans mongodb pendant ses opérations de création/modification.Est-ce que morphia prend en charge l'horodatage automatique?

J'ai déjà appris que ce support n'est pas disponible dans mongodb. Je voudrais savoir s'il y a un moyen d'obtenir le dernier accès/mise à jour des données ou des documents dans le pilote morphia.

Merci, Sadish

Répondre

6

J'utilise généralement une entité de base, qui étendent toutes les autres entités. Il fournit ObjectId, date de création, date de dernière modification, un drapeau désactivé, ...

Les extraits de code pertinents se présentent comme suit:

protected Date creationDate; 
protected Date lastChange; 

// Getters and setters or final setters which don't do anything, 
// if you only want to allow the entity to update the values 

@PrePersist 
public void prePersist() { 
    creationDate = (creationDate == null) ? new Date() : creationDate; 
    lastChange = (lastChange == null) ? creationDate : new Date(); 
} 
1

Désolé à l'avance si ce n'est pas la réponse exacte que vous cherchons. Mais la réponse courte est non.

Il semble qu'il n'y ait aucune API dans la dernière Morphia qui prend en charge cette opération. Peut-être qu'il y a un bug ouvert pour supporter cela. En attendant, vous devriez utiliser votre constructeur favori pour java.util.Date ou java.sql.Timestamp.

Le code source pour Morphia a le convertisseur approprié intégré pour gérer ce TimestampConverter.java.

Seulement lié tangentiellement. Si la raison pour laquelle vous utilisez $currentDate est d'éviter les problèmes d'asymétrie de l'horloge entre plusieurs hôtes, alors vous abîmerez le mauvais arbre. Bien que non explicitement indiqué dans la documentation $currentDate, il est documenté que MongoDB ne fait rien pour adresser l'asymétrie d'horloge parmi divers hôtes. Cela peut être trouvé dans le documentation for ObjectId.getTimestamp(). Par conséquent, l'utilisation de $currentDate ne fournira que peu d'avantages par opposition à l'horodatage du côté client.

+0

Essayez de mettre le lien pour le bug indiqué dans votre réponse. Il va améliorer votre it et le rendre plus facile aux lecteurs de le suivre. – alejdg

+0

Je n'ai pas assez de réputation pour mettre plus de deux liens: D –

+0

Essayez d'utiliser les commentaires. Alors quelqu'un peut éditer la réponse avec lui. – alejdg

Questions connexes