2017-02-13 3 views
0

Я пытаюсь сделать запрос критериев (JPA/Hibernate) в модели, содержащей один столбец с датой (Oracle 11G). Например, у меня естьCriteriaQuery month and year filter

  1. 13-JAN-09
  2. 15-JAN-09
  3. 16-MAR-09

И моя функция как:

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", он должен вернуть:

  1. 13-JAN-09
  2. 15-JAN-09

Любая помощь будет очень ценна, заранее спасибо.

+0

Итак, цель состоит в том, чтобы найти даты, которые относятся к одному месяцу? – Compass

+0

И год, но с любым из них я могу воспроизвести логику. – Thrasher

ответ

1

Предполагаю, что вы получаете свои значения даты, такие как this question.

Вместо того, чтобы создавать беспорядочный запрос, сравнивающий отдельные части дат, просто создайте два охватывающих запроса.

Date c; //this is your provided date. 
Date d; //this is your endpoint. 

d = new Date(c.getTime()); 
d.setMonth(d.getMonth()+1); // creates 01FEB09 

С тех пор, все, что вам нужно сделать, это найти даты GREATERTHANOREQUALTO с и LESSTHAN д.

+0

Я хоть что-то вроде этого, но февраль был моим пограничным случаем. Я попробую это сейчас. – Thrasher