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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top