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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top