使用JPA查找今天生日的用户

时间:2010-03-31 19:15:44

标签: java hibernate orm jpa jpql

我有一个用户表,并且正在尝试获取今天有生日的人的列表,以便应用可以发送电子邮件。

用户定义为

@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

1 个答案:

答案 0 :(得分:2)

我不知道如何在JPQL中执行此操作,但HQL具有day()month()函数,因此您可以运行:

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

如果不能使用HQL,我会选择原生查询。