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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top