2017-01-23 1 views
0

私は私の入力日付値は、データベースレコードCriteriaBuilder.between(日付)を述語に追加しますか?

のたstartDateとendDateに間する必要がありますテーブルを照会しようとしています、私がやろうとしていますJPA

に新しいです:

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

私は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")); 

しかし、どのようにinputDatにParameterexpression値を設定するにe CriteriaBuilderをPredicateに追加する前の変数の値?

+0

ルートクラスを表示できますか? – jonhid

答えて

1

このような何かが動作するはずです...

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

ありがとう、私はbuilder.between(日付)がParameterExpressionまたは他の方法で可能かどうか疑問に思っていました – firstpostcommenter

1

あなたはこの方法を試すことができます。

 

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

このように私の場合は機能します。

あなたのケースでは(ParameterExpressionを使用して)。

 

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

パラメータを設定するときに、パラメータを設定します。 currentDateはあなたの日付で、 d​​です。

私は最初のやり方を好む、私はより直感的で論理的です。

関連する問題