2012-08-26 4 views
0

J'utilise play framework version 1.2.5 et je voudrais récupérer tous les utilisateurs connectés qui n'ont pas mis à jour leur session pendant 5 minutes, puis je voudrais définir leur état de connexion à "déconnecté".Récupérer des éléments de plus de 5 minutes dans DB

Voici mon modèle:

@Entity 
public class User extends Model { 

    @Required 
    public String name; 

    public boolean isConnected; 

    public Date lastConnectionDate; 

} 

Et voici le travail qui mettent à jour les utilisateurs:

Date fiveMinsAgo = new Date(new Date().getTime() - 5 * 60); 
List<User> list = User.find("select u from User u where u.isConnected = true and u.lastConnectionDate < ?", fiveMinsAgo).fetch(); 

for (User user : list) { 
    // We set these accounts as disconnected 
    user.isConnected = false; 
    user.save(); 
} 

Ce code ne semble pas fonctionner. L'utilisateur est défini sur "déconnecté" même si son lastConnectionDate n'a pas plus de 5 minutes. Ai-je fait quelque chose de mal?

Y at-il un meilleur moyen/code pour faire ce que je voudrais faire? (Comme une commande UPDATE)

Merci pour votre aide

Répondre

6

Date.getTime() retourne millisecondes.

Essayez ceci:

Date fiveMinsAgo = new Date(new Date().getTime() - 5 * 60 * 1000); 
+0

Merci à vous deux pour vos réponses cela a résolu mon problème! Je ne sais pas ce qui s'est passé, j'ai lu le javadoc mais je n'ai pas vu l'unité était en ms. En passant, ma façon de faire les choses est-elle correcte? Ou devrais-je utiliser une requête UPDATE? –

2

Utilisez la bibliothèque de temps Joda. Il évite les erreurs telles que les vôtres: 5 * 60 sont 300 millisecondes. Le temps que vous cherchez serait quelque chose comme new DateTime().plusMinutes(-5).

Questions connexes