पहचान नहीं है मैं देशी पोस्टजीआईएस क्वेरी निष्पादित करने के लिए हाइबरनेट/जेपीए का उपयोग कर रहा हूं। इन प्रश्नों के साथ समस्या यह है कि उन्हें ऐसे पैरामीटर की आवश्यकता है जो शास्त्रीय एक्स = 'मान' फ़ॉर्म के नहीं हैं।जेपीए/हाइबरनेट मूल क्वेरी पैरामीटर
उदाहरण के लिए, निम्नलिखित लाइनों दुर्घटना
String queryString = "select * from Cell c where ST_DWithin(c.shape, SetSRID(ST_GeomFromEWKT('POINT(:lon :lat)'),4326), 0.1)";
Query query = Cell.em().createNativeQuery(queryString, Cell.class);
query.setParameter("lon", longitude);
query.setParameter("lat", latitude);
play.exceptions.JavaExecutionException: org.hibernate.QueryParameterException: could not locate named parameter [lon]
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:259)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [lon]
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:358)
निम्न क्वेरी हालांकि काम करता है:
String queryString = String.format("select * from Cell c where ST_DWithin(c.shape, SetSRID(ST_GeomFromEWKT('POINT(%f %f)'),4326), 0.1)", longitude, latitude);
Query query = Cell.em().createNativeQuery(queryString, Cell.class);
(लेकिन यह एसक्यूएल इंजेक्शन की आशंका वाले ... है)
किसी को भी करता है इस मामले में setParameter()
का उपयोग कैसे करें?
Waoo ... धन्यवाद! यह काम करने लगता है !!! – user99054
+1 दिलचस्प चाल जो वास्तव में समस्या की पुष्टि करती है उद्धरणों से आती है, नामित पैरामीटर से नहीं (जिसे किसी को जेपीए से बचना चाहिए)। –
NamedNativeQuery एनोटेशन के साथ स्प्रिंग डेटा में काम करता है, इसलिए रिपोजिटरी कार्यान्वयन के निर्माण की आवश्यकता नहीं है। Spec उद्धृत करने और मुझे याद दिलाने के लिए – lreeder