में दिनांक इकाइयों की तुलना करें EclipseLink कार्यान्वयन के साथ जेपीए 2 का उपयोग करना।जेपीए मानदंड एपीआई
मैं एक गतिशील क्वेरी बनाने की कोशिश कर रहा हूं जो मुझे किसी दिए गए दिनांक के बाद कुछ रिकॉर्ड जारी रखे।
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()
जो मुझे इस मामले में मदद मिल सकती है की तरह लग रहे एपीआई में केवल दो तरीके हैं। यह चेतावनी ग्रहण हालांकि द्वारा फेंका जाता है:
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>>
मैं कल्पना कर सकते हैं कि मैं इस समस्या के लिए सही दृष्टिकोण नहीं ले रहा हूँ, लेकिन मैं एक संभव समाधान के लिए कहीं भी कुछ सुझाव या संकेत नहीं मिल रहा।
नेटबीन 8.2 अभी भी मानदंडों के साथ चेतावनी देता है। मुझे नहीं पता क्यों। 'builder.greaterThanOrEqualsTo (root.get (Some_.date), दिनांक)' <> 'builder.greaterThanOrEqualsTo (रूट। प्राप्त करें (कुछ_.date), दिनांक)' –
@ जिन क्वॉन: 'javax.persistence आयात करना सुनिश्चित करें .criteria.Predicate', 'java.util.function.Predicate' नहीं। यह मेरे लिए तय है :) – Hank
एक खराब आयात मुद्दा नहीं है, यह एक बग है, एक बहुत पुराना है। कार्य करने के लिए आपको इसे एक चर के रूप में घोषित करना होगा और इसे पैरामीटर के रूप में उपयोग करना होगा: 'पथ पथ = root.get (.....); builder.greaterThan (पथ, तारीख); ' – FiruzzZ