Encontrar usuários cujo aniversário é hoje com JPA
Pergunta
Eu tenho uma tabela com usuários e estou tentando obter uma lista com as pessoas que têm aniversário hoje para que o aplicativo possa enviar um email.
O usuário é definido como
@Entity
public class User {
@Size(max = 30)
@NotNull
private String name;
[...]
@Temporal(TemporalType.DATE)
@DateTimeFormat(style = "S-")
protected Date birthday;
}
E eu tenho um método que retorna as pessoas que nasceram hoje como assim
@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;
}
Isso é bom e tudo para encontrar pessoas que nasceram hoje, no entanto, não é realmente tão útil, por isso tenho lutado por uma maneira de encontrar todos os usuários que nasceram hoje, independentemente do ano.
Usando o mysql, há funções que eu posso usar como
select month(curdate()) as month, dayofmonth(curdate()) as day
No entanto, eu tenho lutado para encontrar um JPA equivalente a isso.
Estou usando a primavera 3.0.1 e o Hibernate 3.3.2
Solução
Eu não sei como fazer isso em JPQL, mas o HQL tem day()
e month()
funções para que você possa correr:
from User u
where day(u.birthday) = day(CURRENT_DATE)
and month(u.birthday) = month(CURRENT_DATE)
Se o uso do HQL não é uma opção, eu iria para uma consulta nativa.