Поиск пользователей, у которых сегодня день рождения, с помощью JPA

StackOverflow https://stackoverflow.com/questions/2555791

Вопрос

У меня есть таблица с пользователями, и я пытаюсь получить список людей, у которых сегодня день рождения, чтобы приложение могло отправить электронное письмо.

Пользователь определяется как

@Entity
public class User {

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

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

и у меня есть метод, который возвращает людей, родившихся сегодня, вот так

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

Это прекрасно и все для поиска людей, родившихся сегодня, однако на самом деле это не так уж полезно, поэтому я изо всех сил пытался найти способ найти всех пользователей, родившихся сегодня, независимо от года.

Используя MySQL, я могу использовать такие функции, как

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

Однако я изо всех сил пытался найти эквивалент JPA для этого.

Я использую Spring 3.0.1 и Hibernate 3.3.2

Это было полезно?

Решение

Я не знаю, как это сделать в JPQL, но в HQL есть day() и month() функции, чтобы вы могли запускать:

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

Если использование HQL не является вариантом, я бы выбрал собственный запрос.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top