एक वेब प्रोजेक्ट में, MySQL 5.6 डेटाबेस के साथ नवीनतम स्प्रिंग-डेटा (1.10.2) का उपयोग करते हुए, मैं पेजेशन के साथ एक देशी क्वेरी का उपयोग करने की कोशिश कर रहा हूं, लेकिन मैं org.springframework.data.jpa.repository.query.InvalidJpaQueryMethodExceptionस्टार्टअप पर अनुभव कर रहा हूं ।
अद्यतन : 20180306 यह मुद्दा अब स्प्रिंग 2.0.4 में तय हो गया है। जो अभी भी रुचि रखते हैं या पुराने संस्करणों के साथ अटके हुए हैं, वे वर्कअराउंड के लिए संबंधित उत्तरों और टिप्पणियों की जांच करते हैं।
उदाहरण के अनुसार वसंत-डेटा प्रलेखन से @Query का उपयोग करते हुए यह क्वेरी को स्वयं निर्दिष्ट करना संभव है और इस तरह एक काउंटविक्यू:
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
}
जिज्ञासा से बाहर, NativeJpaQueryकक्षा में मैं देख सकता हूं कि यह जाँचने के लिए निम्नलिखित कोड है कि क्या यह एक वैध जप क्वेरी है:
public NativeJpaQuery(JpaQueryMethod method, EntityManager em, String queryString, EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
super(method, em, queryString, evaluationContextProvider, parser);
JpaParameters parameters = method.getParameters();
boolean hasPagingOrSortingParameter = parameters.hasPageableParameter() || parameters.hasSortParameter();
boolean containsPageableOrSortInQueryExpression = queryString.contains("#pageable") || queryString.contains("#sort");
if(hasPagingOrSortingParameter && !containsPageableOrSortInQueryExpression) {
throw new InvalidJpaQueryMethodException("Cannot use native queries with dynamic sorting and/or pagination in method " + method);
}
}
मेरी क्वेरी में एक Pageableपैरामीटर है, इसलिए hasPagingOrSortingParameterयह है true, लेकिन यह भी अंदर एक अनुक्रम #pageableया #sortअनुक्रम की तलाश में है queryString, जो मैं प्रदान नहीं करता हूं।
मैंने #pageableअपनी क्वेरी के अंत में जोड़ने की कोशिश की है (यह एक टिप्पणी है), जो पास करने के लिए सत्यापन करता है लेकिन फिर, यह निष्पादन में यह कहते हुए विफल हो जाता है कि क्वेरी 2 के बजाय एक अतिरिक्त पैरामीटर: 3 की अपेक्षा करती है।
अजीब बात यह है कि है, अगर मैं मैन्युअल रूप से बदल containsPageableOrSortInQueryExpressionसे falseकरने के लिए trueहै, जबकि चल रहा है, क्वेरी ठीक काम करता है तो मैं क्यों यह है कि स्ट्रिंग के लिए जाँच कर रहा है मेरी पर होना पता नहीं है queryStringऔर मैं नहीं जानता कि यह कैसे प्रदान करने के लिए।
कोई भी सहायताकाफी प्रशंसनीय होगी।
अद्यतन ०१/३०/२०१ 01 ऐसा लगता है कि वसंत-डेटा परियोजना के डेवलपर्स जेएनएन शाहर द्वारा पीआर के साथ इस मुद्दे के लिए एक तय पर काम कर रहे हैं