CriteriaQuery月和年过滤器 [英] CriteriaQuery month and year filter

查看:196
本文介绍了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

  1. 09年1月13日
  2. 09年1月15日
  3. 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:

  1. 09年1月13日
  2. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆