java - 使用 JPA 查找今​​天生日的用户

标签 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

最佳答案

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

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

如果无法使用 HQL,我会选择原生查询。

关于java - 使用 JPA 查找今​​天生日的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555791/

相关文章:

java - session 超时混淆 - session.setMaxInactiveInterval(0)

java - Jpa 复合键可为空的列

java - Hibernate 自增属性

django - 通过反向外键关系过滤使用存在的元素

asp.net-mvc - ASP.NET MVC 中的 NHibernate session 管理

java - 进度对话框不起作用

java - Webclient 发送没有正文的 POST 将得到 IllegalStateException

java - @XmlJavaTypeAdapter 和包装器

java - hibernate 异常;找到同一集合的两个表示

java - StatelessSession#connection() 在 Hibernate 上已弃用?