【发布时间】:2015-11-18 23:55:26
【问题描述】:
我正在编写一个 JAVA 后台作业,该作业每天在午夜附近运行,并检查数据库中明天将过生日的所有人员并向他们发送自动问候电子邮件。
我知道如何编写本机查询,但在 Hibernate Criteria 查询中难以编写。 因此,我需要将原生 MySQL 查询转换为等效的 JPA 条件查询。
SimpleDateFormat birthdayFormatter = new SimpleDateFormat("MMdd");
String birthDay = birthdayFormatter.format(tomorrow);
原生查询:select * from person WHERE DATE_FORMAT(birthday, '%m%d') =birthDay;
在休眠标准中我有:
Criteria criteria = createCriteria();
criteria.add(Restrictions.eq("DATE_FORMAT(birthday, '%m%d')", birthDay));
那行不通。我也试过:Restrictions.sqlRestriction("DATE_FORMAT(birthday, '%m%d') = '" + birthDay + "'");
这也行不通..感谢任何建议..
【问题讨论】:
-
Restrictions 与 JPA Criteria 无关,即 Hibernate Criteria 所以决定你使用什么。其次,您可以使用 JPQL“函数”调用任何 SQL 函数(在 JPA 标准中也是如此)。当你这样做时会发生什么?
-
很抱歉造成混乱,感谢您的指出。事实上,我正在使用 Hibernate Criteria,所以我的问题应该是“如何在 Hibernate Criteria Query 中使用 MySQL 函数”。使用 JPQL,我能够得到想要的结果。我只是想知道如何在 Hibernate 中做到这一点。我意识到在 JPA Criteria 中,有类似 criteriaBuilder.function() 的东西。