2010-03-31 3 views
2

J'ai une table avec les utilisateurs et j'essaie d'obtenir une liste avec les personnes qui ont un anniversaire aujourd'hui afin que l'application puisse envoyer un email.Trouver des utilisateurs dont l'anniversaire est aujourd'hui avec JPA

L'utilisateur est défini comme

@Entity 
public class User { 

    @Size(max = 30) 
    @NotNull 
    private String name; 

    [...] 
    @Temporal(TemporalType.DATE) 
    @DateTimeFormat(style = "S-") 
    protected Date birthday; 
} 

et j'ai une méthode qui renvoie les gens qui sont nés aujourd'hui comme si

@SuppressWarnings("unchecked") 
public static List<User> findUsersWithBirthday() { 

List<User> users = 
    entityManager().createQuery("select u from User u where u.birthday = :date") 
    .setParameter("date", new Date(), TemporalType.DATE) 
    .getResultList(); 
    return users; 
} 

Ceci est bien et tout pour trouver des gens qui étaient né aujourd'hui, mais ce n'est pas vraiment utile, alors j'ai lutté pour trouver un moyen de trouver tous les utilisateurs qui sont nés aujourd'hui, indépendamment de l'année.

Utilisation de MySQL, il y a des fonctions que je peux utiliser comme

select month(curdate()) as month, dayofmonth(curdate()) as day 

Cependant, j'ai du mal à trouver un JPA équivalent à celui.

J'utilise Spring 3.0.1 et Hibernate 3.3.2

Répondre

2

Je ne sais pas comment faire dans JPQL mais HQL a day() et month() fonctions pour que vous puissiez exécuter:

from User u 
where day(u.birthday) = day(CURRENT_DATE) 
and month(u.birthday) = month(CURRENT_DATE) 

Si l'utilisation de HQL n'est pas une option, j'opterais pour une requête native.

Questions connexes