chr*_*ann 10 java hibernate jpa
我正在尝试使用以下代码从MySQL
表中提取Experience对象列表.每个体验都有一个from datetime
列和一个datetime
列,我只想拉出今天日期落在from和to之间的行.
我正在使用JPA 2.0运行Hibernate.
Date currentDate = new Date();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Experience> query = builder.createQuery(Experience.class);
Root<Experience> root = query.from(Experience.class);
builder.between(currentDate, root.get("from"), root.get("to"));
return entityManager.createQuery(query).getResultList();
Run Code Online (Sandbox Code Playgroud)
我的问题是,builder.between()
显然不允许我传递Date对象.
我的问题有更好的解决方案吗?
axt*_*avt 19
您可以将其作为参数传递:
ParameterExpression<Date> d = builder.parameter(Date.class);
builder.between(d, root.<Date>get("from"), root.<Date>get("to"));
return entityManager.createQuery(query)
.setParameter(d, currentDate, TemporalType.DATE).getResultList();
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,您需要指定所需的时间类型.
您也可以依靠数据库的当前日期:builder.currentDate()
,builder.currentTimestamp()
,等
Ber*_*nie 10
你只是错过了对CriteriaBuilder.literal()的调用:
Date currentDate = new Date();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Experience> query = builder.createQuery(Experience.class);
Root<Experience> root = query.from(Experience.class);
builder.between(builder.literal(currentDate), root.get("from"), root.get("to"));
return entityManager.createQuery(query).getResultList();
Run Code Online (Sandbox Code Playgroud)
你应该切换你的参数:
builder.between(root.<Date>get("dateColumn"), startDate, endDate);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41300 次 |
最近记录: |