2017-01-23 9 views
0

Ich bin neu in JPACriteriaBuilder.between (Date) zu Prädikat hinzufügen?

ich eine Tabelle abzufragen versuchen, wo mein Eingangsdatum Wert zwischen dem startdate und endDate des Datenbankeintrags

Ich versuche zu tun sein sollte:

List<Predicate> conditionsList = new ArrayList<Predicate>(); 
conditionsList.add(criteriaBuilder.between(inputDate, root.get("startDate"), root.get("endDate"))); 

fand ich die unten Lösung von Using JPA/Hibernate Criteria to pull between a date:

ParameterExpression<Date> d = criteriaBuilder.parameter(Date.class); 
criteriaBuilder.between(d, root.<Date>get("startDate"), root.<Date>get("endDate")); 

Aber wie die Parameterexpression Wert InputDAT einstellen Der Variablenwert vor dem Hinzufügen des CriteriaBuilder zum Prädikat?

+0

Können Sie Ihre Stammklasse anzeigen? – jonhid

Antwort

1

So etwas sollte funktionieren ...

List<Predicate> conditionsList = new ArrayList<Predicate>(); 
Predicate onStart = criteriaBuilder.greaterThanOrEqualTo(root.get("startDate"), inputDate); 
Predicate onEnd = criteriaBuilder.lessThanOrEqualTo(root.get("endDate"), inputDate); 
conditionsList.add(onStart); 
conditionsList.add(onEnd); 
criteriaQuery.select(root).where(conditionsList.toArray(new Predicate[]{})); 
+0

Danke, ich frage mich, ob builder.between (date) durch ParameterExpression oder eine andere Möglichkeit möglich ist – firstpostcommenter

1

Sie können auf diese Weise versuchen.

 

    Predicate date = cb.between(root.get("date"), dateBefore, dateAfter); 
    predicate.add(date); 

dieser Weg funktioniert für meinen Fall.

Aber für Ihren Fall (mit ParameterExpression).

 

    return entityManager.createQuery(query) 
    .setParameter(d, currentDate, TemporalType.DATE).getResultList(); 

Wenn Sie die Abfrage erstellen, legen Sie Parameter fest. currentDate ist Ihr Datum, d ist ParameterExpression, die Sie zuvor erstellen.

Ich bevorzuge den ersten Weg, es ist intuitiver und logisch für mich.