2012-03-08 13 views
21

तो मेरी इकाई है:JPA2 मानदंड एपीआई के साथ चयन मैक्स टाइमस्टैम्प

@Column(name="TS", nullable=false) 
private java.sql.Timestamp timestamp; 

मेरे उत्पन्न मेटामॉडल है:

Root<MyEntity> root = query.from(MyEntity.class); 
Expression maxExpression = cb.max(root.get(MyEntity_.timestamp)); 
:

public static volatile SingularAttribute<MyEntity,Timestamp> timestamp; 

मैं मैक्स टाइमस्टैम्प मूल्य से चयन करना चाहते हैं

लेकिन मुझे अनुमति नहीं है क्योंकि:

max(Expression<N> x) संख्यात्मक अधिकतम ऑपरेशन लागू करने वाली एक समग्र अभिव्यक्ति बनाएं। <N extends java.lang.Number> अभिव्यक्ति

पाठ्यक्रम Timestamp के

Number विस्तार नहीं करता है।

टाइपफैफ़ मानदंड API का उपयोग कर Timestamp कॉलम पर मैं MAX कैसे कर सकता हूं?

धन्यवाद।

उत्तर

39

अधिकतम के बजाय आपको टाइमस्टैम्प के लिए CriteriaBuilder.greatest का उपयोग करना होगा (और दिनांक, स्ट्रिंग और अन्य तुलनात्मक के लिए भी)। और यदि आपको कभी भी टाइमस्टैम्प के लिए MIN की आवश्यकता है, तो

इसी प्रकार की समस्या को कम/अधिक/बराबर तुलना के साथ सामना किया जा सकता है। एफआईआर एक तर्क यह है कि संख्या फैली स्वीकार करता है, दूसरा एक अन्य comparables के लिए है:

  • lt बनाम lessthan
  • le बनाम lessThanOrEqualTo
  • जीई बनाम greaterThanOrEqualTo
  • जीटी बनाम greaterThan
+1

धन्यवाद मिक्को - मुझे एपीआई दस्तावेज़ों में याद आया। – planetjones

+0

sub.where (cb.greatest (histories.get ("activeDate"))); [ERROR] आवश्यक: javax.persistence.criteria.Expression [ERROR] मिला: javax.persistence.criteria.Path [त्रुटि] कारण: अनुमानित प्रकार ऊपरी बाउंड के अनुरूप नहीं है) –

संबंधित मुद्दे