Поиск пользователей, у которых сегодня день рождения, с помощью JPA
Вопрос
У меня есть таблица с пользователями, и я пытаюсь получить список людей, у которых сегодня день рождения, чтобы приложение могло отправить электронное письмо.
Пользователь определяется как
@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 не является вариантом, я бы выбрал собственный запрос.