JPA 2をEclipseLinkで実装しています。JPAの日付エンティティを比較基準API
動的なクエリを作成しようとしていますが、指定した日付の後にいくつかのレコードが残っているはずです。
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Event> criteria = builder.createQuery(Event.class);
Root<Event> root = criteria.from(Event.class);
criteria.select(root);
criteria.distinct(true);
List<Predicate> predicates = new ArrayList<Predicate>();
//...
if (dateLimit != null){
ParameterExpression<Date> param = builder.parameter(Date.class, "dateLimit");
predicates.add(builder.lessThanOrEqualTo(root.get("dateCreated"), param));
}
lessThanOrEqualTo()
とle()
は、この場合には、私を助けるかもしれないように見えるAPIで唯一の2つの方法です。この警告はいえ日食によってスローされます。
Bound mismatch: The generic method lessThanOrEqualTo(Expression<? extends Y>, Expression<? extends Y>)
of type CriteriaBuilder is not applicable for the arguments (Path<Object>, ParameterExpression<Date>).
The inferred type Object is not a valid substitute for the bounded parameter
<Y extends Comparable<? super Y>>
私はこの問題の正しいアプローチを取っていないよしかし、私はどこでも可能な解決策のためのいくつかのヒントやポインタを見つけることができないことを想像することができます。
NetBeans 8.2は、依然として基準で警告します。どうしてか分かりません。 @bukwon: 'javax.persistence()'をインポートしてください。 'builder.greaterThanOrEqualsTo(root.get(Some_date)、date)' <> 'builder.greaterThanOrEqualsTo(ルート。 get(Some_date)、date)' –
@ .criteria.Predicate'ではなく、 'java.util.function.Predicate'です。それは私のためにそれを修正:) – Hank
悪いインポートの問題ではない、それはバグ、非常に古いものです。 回避策としては、変数として宣言し、パラメータとして使用する必要があります。 'Path path = root.get(.....); builder.greaterThan(パス、日付); ' – FiruzzZ