Pregunta

Tengo una tabla con los usuarios y está tratando de obtener una lista con las personas que tienen su cumpleaños hoy lo que la aplicación puede enviar un correo electrónico.

El usuario se define como

@Entity
public class User {

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

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

y tengo un método que devuelve las personas nacidas hoy al igual que

@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;
}

Esto está bien y todo por la búsqueda de personas nacidas hoy, sin embargo tha no es tan útil, por lo que he estado luchando por una forma de encontrar todos los usuarios que han nacido hoy, independientes del año.

El uso de MySQL hay funciones que puede utilizar como

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

Sin embargo he estado luchando para encontrar un equivalente a la APP.

Estoy utilizando Spring e Hibernate 3.0.1 3.3.2

¿Fue útil?

Solución

No sé cómo hacer eso en JPQL pero HQL tiene funciones day() y month() por lo que podría funcionar:

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

Si se utiliza HQL no es una opción, me gustaría ir para una consulta nativa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top