2009-12-07 11 views
7

मैं अपने कुछ एचक्यूएल-स्टेटमेंट्स को मानदंडों में माइग्रेट कर रहा हूं, अब मैं एक समस्या का पता लगा रहा हूं: इकाई गुण इंटीजर टाइप है लेकिन मुझे वाइल्डकार्ड खोज के साथ एक तरह की आवश्यकता है, इसलिए एचक्यूएल में मैंहाइबरनेट मानदंड, पूर्णांक और "पसंद"

session.createQuery("from P1 where id like :id").setString("id", "%"+s+"%") 

कोई समस्या नहीं है पर सभी करते हैं, हाइबरनेट पूर्णांक के लिए स्ट्रिंग डाले।

अगर मैं मानदंड में यह कोशिश करते हैं, मैं केवल एक ClassCastException

String cannot be cast to Integer 

Criteria crit = sessionFactory.getCurrentSession().createCriteria(P1.class); 
crit.add(Restrictions.like("id",s)).addOrder(Order.asc("id")).setMaxResults(maxResults); 

क्यों हाइबरनेट दोनों स्थितियों में अलग ढंग से कैसे निपटता है मिल सकता है?

+0

यह समझ में नहीं आता है। क्वेरी इंजन स्वयं इसे प्रबंधित करने में सक्षम है, लेकिन मानदंड इंजन नहीं है। ऐसा लगता है जैसे citeria impl में एक बग है। – onigunn

उत्तर

8

आप str expression conversion का उपयोग कर सकते हैं। अगर यह कोई समझ में आता है।

str() एक पठनीय स्ट्रिंग

session.createQuery("from P1 where str(id) like :id").setString("id", "%"+s+"%") 

को सांख्यिक या अस्थायी मान परिवर्तित करने के लिए यह काफी धीमी गति से हो सकता है अगर आप स्तंभ पर एक function based index जरूरत नहीं है।

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