2011-11-18 17 views
6

यहाँ कोड कारण है कि यह काम नहीं कर रहा है कि मुझे बहुत समय ले लिया यह पता लगाने की का एक न्यूनतम संस्करण है:HibernateException लेकिन setParameter के साथ काम करता

Query q = session.createQuery(queryString); 
q.setTimestamp(0, new java.util.Date()); 

 

त्रुटि थी:

Unset positional parameter at position: 0 

 

जब मैं setParameter() साथ setTimestamp() लाए गए:

Query q = session.createQuery(queryString); 
q.setParameter(0, new java.util.Date()); 

 

और यह काम किया, लेकिन मैं क्यों समझ नहीं कर सकते हैं। मैं हाइबरनेट 3.2.1 का उपयोग कर रहा हूँ।

संपादित करें: अन्य सुझाव के साथ पोस्ट कहां गया? यही था वह!!

+0

आपकी क्वेरी स्ट्रिंग कैसी दिखती है? – Casey

+0

यह उन अनुप्रयोगों से था जहां s.validUntil के बीच? और? "' (एचक्यूएल)। वास्तव में 'cal.getTime()' का उपयोग करके 'कैलेंडर' ऑब्जेक्ट से थे, लेकिन इसे सरल रखने के लिए, मैंने अभी एक बेयर 'डेट' ऑब्जेक्ट शामिल किया था। त्रुटि दोनों तरीकों से रहता है। – Raidok

उत्तर

1

पहले यहां एक उत्तर था जो java.util.Date के बजाय java.sql.Timestamp का उपयोग करने का सुझाव दिया गया था। इस छोटे से संशोधन के साथ, setTimestamp विधि अपेक्षित कार्य करता है।

+0

टाइमस्टैम्प को जेडीके 1.1 के रूप में बहिष्कृत किया गया है – abbas

0

अपने मानचित्रण में आप अपने चर को निम्नलिखित एनोटेशन कि समय-चिह्न

@Temporal(TemporalType.TIMESTAMP) रखा है जोड़ना पड़ सकता है

यही कारण है कि setParameter काम कर रहा है हो सकता है (यह सिर्फ एक वस्तु लेता है) और setTimestamp नहीं है ।

+0

मुझे नहीं लगता कि यह है। फ़ील्ड पहले से ही 'टाइमस्टैम्प' टाइप है। अन्यथा मुझे संदेह है कि यह 'सेट पैरामीटर()' के साथ काम करेगा। – Raidok

+0

जरूरी नहीं है। @ टेम्पोरल एनोटेशन के बिना, क्षेत्र को हाइबरनेट द्वारा DATE के रूप में माना जाता है। सेट पैरामीटर को कॉल करते समय, आप तिथि उदाहरण के क्षेत्र में दिनांक उदाहरण को बाध्य करते हैं। सब कुछ ठीक है। SetTimestamp के साथ, आप एक टाइमस्टैम्प ऑब्जेक्ट को DATE फ़ील्ड में बांधते हैं। यह वही बात नहीं है। क्या आपने कम से कम इस समाधान की कोशिश की है? –

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