CriteriaQuery月和年过滤器 [英] CriteriaQuery month and year filter
本文介绍了CriteriaQuery月和年过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试在一个模型中进行条件查询(JPA/Hibernate),该模型包含一个带有日期的列(Oracle 11G).例如,我有
I'm trying to make a criteria query (JPA/Hibernate)in a model which contain one column with date (Oracle 11G) . For example, i have
- 09年1月13日
- 09年1月15日
- 09年3月16日
我的功能就像:
public MyEntity getEntitiesFromCertainFilters(int a, int b, java.util.date c)
{
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery< MyEntity > query = builder.createQuery(MyEntity.class);
Root< MyEntity > root = query.from(MyEntity.class);
query.select(root).where (
builder.equal ( root.get ( "id" ).get ( "codEstablec" ) , establecimiento),
builder.equal ( root.get ( "id" ).get ( "correlGrupo" ) , correlGrupo),
//HERE I NEED TO ADD FILTER BY C.MONTH AND C.YEAR FROM THE DATE ATTRIBUTE
);
List < MyEntity > resultList = entityManager.createQuery(query).getResultList();
return resultList.get(0);
}
如果我想按c ="01-JAN-09"进行过滤,则应返回:
If i want to filter by c = "01-JAN-09", it should return:
- 09年1月13日
- 09年1月15日
任何帮助将不胜感激, 预先感谢.
Any help would be really appreciated, thanks in advance.
推荐答案
您可以使用builder.function方法.例如
You can use the builder.function method. E.g.
query.select(root).where (
builder.equal ( root.get ( "id" ).get ( "codEstablec" ) , establecimiento),
builder.equal ( root.get ( "id" ).get ( "correlGrupo" ) , correlGrupo),
builder.equal(builder.function("YEAR", Integer.class, root.get("DATE_FIELD") ), C.YEAR),
builder.equal(builder.function("MONTH", Integer.class, root.get("DATE_FIELD")), C.MONTH)
);
这篇关于CriteriaQuery月和年过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文