2010-11-24 9 views
6

में विफल होने के लिए जेनरेट किया गया है। मैं नए जेपीए 2.0 मानदंड एपीआई का पहली बार उपयोगकर्ता हूं और जब मैं तुलना करने के लिए स्ट्रिंग में नंबर फ़ील्ड डालना चाहता हूं तो मैं एक समस्या में भाग रहा हूं यह एक स्ट्रिंग पैरामीटर के साथ। कारण यह है कि मैं आंशिक संख्याओं की खोज करना चाहता हूं, इसलिए मैं मानदंडबिल्डर पर 'जैसे' का उपयोग करता हूं। यहाँ एक कोड नमूना है:जेपीए 2.0 मानदंड एपीआई और कास्ट कारणों का उपयोग जेपीक्यूएल को हाइबरनेट

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder(); 
     CriteriaQuery<ParcelDO> cq = cb.createQuery(ParcelDO.class); 
     Root<ParcelDO> parcelDO = cq.from(ParcelDO.class); 
     cq.select(parcelDO); 

     String parcelNumberId = parcelSearchDetailDO.getParcelNumberId(); 
     if (parcelNumberId != null && !parcelNumberId.isEmpty()) { 
      Predicate parcelNumberIdPredicate = cb.like(
        parcelDO.<Long> get("parcelNumberId").as(String.class), 
        parcelNumberId + "%"); 

      if (cq.getRestriction() != null) { 
       cq.where(cq.getRestriction(), parcelNumberIdPredicate); 
      } else { 
       cq.where(parcelNumberIdPredicate); 
      } 
     } 

महत्वपूर्ण हिस्सा

Predicate parcelNumberIdPredicate = cb.like(
        parcelDO.<Long> get("parcelNumberId").as(String.class), 
        parcelNumberId + "%"); 

जहाँ मैं मानदंड एपीआई का उपयोग एक अभिव्यक्ति CriteriaBuilder पर की तरह विधि के लिए आवश्यक में पथ परिवर्तित करने के लिए है।

अब जब मैं चलाने के लिए और यह इस कोड निष्पादित करता है, अंतर्निहित जेपीए 2.0 कार्यान्वयन हाइबरनेट निम्न अपवादों के साथ विफल रहता है: हाइबरनेट की तरह एक JPQL कि सही नहीं है पैदा कर रहा है

Caused by: org.hibernate.hql.ast.QuerySyntaxException: 
expecting CLOSE, found '(' near line 1, column 117 
[select generatedAlias0 from domain.ParcelDO as generatedAlias0 where 
cast(generatedAlias0.parcelNumberId as varchar2(255 char)) like :param0] 

मेरे लिए लग रहा है।

मुझे नहीं पता कि क्या गलत है, क्या आप मदद कर सकते हैं?

मैं नवीनतम हाइबरनेट संस्करण (3.6.0.CR2)

आप

+0

यह एक बग है, मैंने इसकी सूचना दी: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5755 – axtavt

+0

एक्स्टाव, धन्यवाद। क्या आपको अभी तक कोई कामकाज मिला है? – bruma

+0

सबसे हल्का हाइबरनेट-इकाई प्रबंधक (रिलीज) संस्करण 3.6.0 है। अंतिम। – dira

उत्तर

4

एक बग है क्या यह जेपीए की बात आती है, अभिव्यक्ति.एएस विधि का प्रयोग गलत तरीके से करने के लिए किया जाता है। Expression<Number> से Expression<String> कास्टिंग Expression.as के माध्यम से काम नहीं करना चाहिए। बेशक गलत जेपीक्यूएल के बजाय स्पष्ट त्रुटि संदेश होना अच्छा लगेगा।

के रूप में कहा दस्तावेज में, यह टाइपकास्ट निष्पादित करता है जो रूपांतरण से अलग अवधारणा प्रकार से अन्य के लिए है,:

अभिव्यक्ति पर एक समान किरदार को पूरा करें, एक नया अभिव्यक्ति वस्तु लौटने। यह विधि टाइप रूपांतरण का कारण नहीं बनती है: रनटाइम प्रकार नहीं बदला गया है। चेतावनी: परिणामस्वरूप रनटाइम विफलता हो सकती है।

+0

कोई विचार अगर टाइपकास्टिंग के लिए कोई समाधान मौजूद है? –