bgu*_*uiz 26 java documentation date jpql
SELECT x FROM SomeClass
WHERE x.dateAtt BETWEEN CURRENT_DATE AND (CURRENT_DATE + 1 MONTH)
Run Code Online (Sandbox Code Playgroud)
在上面的JPQL语句中,SomeClass有一个memebr dateAttr,它是一个java.util.Date并且有一个@Temporal(javax.persistence.TemporalType.DATE)注释.
我需要一种方法来做这(CURRENT_DATE + 1 MONTH)一点 - 它在当前状态下显然是错误的 - 但是找不到带有JPQL日期函数的doc.
任何人都可以指向我的文档的方向,文档JPQL日期函数(以及如何执行此特定查询)?
She*_*ari 18
如果你有一个+ 1个月的日期对象,你可以做这样的事情:
public List findEmployees(Date endDate) {
return entityManager.createQuery(
"SELECT e from Employee e WHERE e.startDate BETWEEN ?1 AND ?2")
.setParameter(1,new Date(), TemporalType.DATE)
.setParameter(2,endDate, TemporalType.DATE).getResultList();
}
Run Code Online (Sandbox Code Playgroud)
但是,这要求日期有效.
UPDATE
如果你总是想要下个月,你可以使用JodaTime,它有一个非常简单的api.然后,您可以像这样修改您的查询:
//Get next month
DateTime dt = new DateTime();
entityManager.createQuery(
"SELECT e from Employee e WHERE e.startDate BETWEEN ?1 AND ?2")
.setParameter(1,new Date(), TemporalType.DATE)
.setParameter(2,dt.plusMonths(1).toDate(), TemporalType.DATE).getResultList();
Run Code Online (Sandbox Code Playgroud)
或者使用commons-lang代替jodatime:
entityManager.createQuery(
"SELECT e from Employee e WHERE e.startDate BETWEEN ?1 AND ?2"
)
.setParameter(1,new Date(), TemporalType.DATE)
.setParameter(2,DateUtils.addMonths(new Date(), 1), TemporalType.DATE)
.getResultList();
Run Code Online (Sandbox Code Playgroud)
但是我知道这不是您要问的,我很确定不能仅在JPQL中完成它,您要么必须传递参数,要么使用本地命名查询
| 归档时间: |
|
| 查看次数: |
44102 次 |
| 最近记录: |