2017-02-13 2 views
0

日付(Oracle 11G)を含む1つの列を含むモデルで条件クエリ(JPA/Hibernate)を作成しようとしています。例えば、私が持っているCriteriaQuery年月フィルタ

  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

だから、目標は1ヶ月以内の日付を見つけることですか? – Compass

+0

そしてその年のうち、私はそれらの論理を再現することができます。 – Thrasher

答えて

1

this questionのような日付の値を取得していると仮定します。

日付の個々の部分を比較する不吉なクエリを作成するのではなく、2つの包括的なクエリを作成するだけです。それ以降

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 CとD LESSTHANを見つけることです。

+0

私はこのようなことがあったが、2月は私の国境の場合だった。私は今これを試してみる。 – Thrasher