Trouver les utilisateurs dont l'anniversaire est aujourd'hui avec JPA
Question
J'ai une table avec les utilisateurs et tentent d'obtenir une liste des personnes qui ont anniversaire aujourd'hui pour l'application peut envoyer un e-mail.
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 sont nés aujourd'hui, mais tha est pas vraiment utile, donc j'ai lutté pour un moyen de trouver tous les utilisateurs qui sont nés aujourd'hui, indépendamment de l'année.
En utilisant 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 à.
J'utilise Spring 3.0.1 et 3.3.2 Mise en veille prolongée
La solution
Je ne sais pas comment faire dans JPQL mais HQL a des fonctions de day()
et month()
pour que vous puissiez exécuter:
from User u
where day(u.birthday) = day(CURRENT_DATE)
and month(u.birthday) = month(CURRENT_DATE)
Si vous utilisez HQL est pas une option, je pencherais pour une requête native.