Die Suche nach Benutzern, deren Geburtstag ist heute mit JPA
Frage
Ich habe eine Tabelle mit den Nutzern und versuche, eine Liste mit den Leuten zu bekommen, die heute Geburtstag haben, so dass der App eine E-Mail senden kann.
Der Nutzer ist definiert als
@Entity
public class User {
@Size(max = 30)
@NotNull
private String name;
[...]
@Temporal(TemporalType.DATE)
@DateTimeFormat(style = "S-")
protected Date birthday;
}
und ich habe eine Methode bekommt, die die Menschen zurück, die heute geboren wurden wie so
@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;
}
Das ist in Ordnung und das alles für Leute zu finden, die heute geboren wurden, aber tha ist nicht wirklich sinnvoll, so dass ich schon eine Art und Weise zu kämpfen alle Nutzer zu finden, die heute geboren wurden, unabhängig vom Jahr.
Mit MySQL gibt es Funktionen kann ich wie nutzen
select month(curdate()) as month, dayofmonth(curdate()) as day
Allerdings habe ich zu kämpfen eine JPA äquivalent zu finden.
Ich bin mit Spring 3.0.1 und Hibernate 3.3.2
Lösung
Ich weiß nicht, wie das zu tun in JPQL aber HQL hat day()
und month()
Funktionen, so dass Sie laufen können:
from User u
where day(u.birthday) = day(CURRENT_DATE)
and month(u.birthday) = month(CURRENT_DATE)
Wenn HQL verwenden keine Option ist, dass ich für eine native Abfrage gehen würde.