2010-05-08 8 views
8

मुझे हाइबरनेट मूल क्वेरी के साथ कोई समस्या है। मेरे पास एक चयन है जो सरणी स्लाइस (PostgreSQL डेटाबेस) का चयन करता है।नामित पैरामीटर के साथ मूल क्वेरी समस्या हाइबरनेट

समस्या यह है कि हाइबरनेट निम्न भाग को पहचानता है: नामित पैरामीटर के रूप में "SELECT my_array [1: 300] ..." से "300:" और मुझे निम्न अपवाद मिलता है: सभी नामित पैरामीटर सेट नहीं किए गए हैं।

मैंने कॉलन से बचने की कोशिश की (:) ':', '::' के साथ लेकिन कोई सफलता नहीं।

हाइबरनेट संस्करण 3.2

उत्तर

4

मैं PostgreSQL का उपयोग नहीं करते है, लेकिन अगर आप इस समस्या को आप एक इंटरसेप्टर लागू कर सकते हैं के लिए एक उचित समाधान नहीं मिल रहा है (EmptyInterceptor विस्तार) और onPrepareStatement(String sql) पर आपकी क्वेरी को संशोधित।

जिसका अर्थ है कि आप my_array[1|300] जैसे कुछ का उपयोग कर सकते हैं और नामित पैरामीटर समस्या को हल करने के लिए इसे my_array[1:300] के रूप में पुनः लिख रहे हैं।

संपादित करें: मैं 100% सुनिश्चित नहीं हूं कि उपर्युक्त काम (देशी एसक्यूएल को फिर से लिखना और क्या क्वेरी पार्सर विशेष चरित्र की अनुमति देगा)। मैंने उपरोक्त केवल एचक्यूएल और मानदंडों में किया है जहां मैं एक प्रश्न टिप्पणी के रूप में सूचकांक संकेत पास कर रहा था।

+0

धन्यवाद, मूल निवासी प्रश्नों के साथ भी काम करता है :) – dime

3

कोलोन खुद ही हाइबरनेट में बचने योग्य नहीं है (2005 से Bug ज्ञात है)।

1
create function array_slice(a anyarray, start int4, end int4) returns anyarray as 
$$ 
    SELECT a[start:end]; 
$$ 
language(sql); 

अब इसके बजाय इस फ़ंक्शन को कॉल करें। कोशिश नहीं की लेकिन यह किसी भी तरह से काम करेगा।

1

MyInterceptor extends EmptyInterceptor चेरौविम द्वारा वर्णित कार्य करता है।

persistence.xml में भूल नहीं है

<property name="hibernate.ejb.interceptor" value="MyInterceptor"/> 

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