2016-11-27 13 views
5

के साथ काम नहीं करता है IF डेटाबेस की जांच करने के लिए निम्न विधि के साथ @ रिपोजिटरी इंटरफ़ेस है जिसमें एक के साथ एक रिकॉर्ड टकराव (व्यवसाय डोमेन अर्थ में) है। जारी रहती है (मैं के बारे में क्या टकराने रिकॉर्ड कर रहे हैं परवाह नहीं है):जेपीए @Query 'केस मौजूद होने पर' हाइबरनेट

@Query("select case when exists (
      select me from MyEntity me where {my conditions regarding someParam here} 
     ) then true else false end from MyEntity") 
boolean findColliding(@Param("someParam") String someParam); 

जिस पर मैं इसे खाली है चलाने तालिका (PostgreSQL) इसलिए मौजूद सबक्वेरी कुछ भी नहीं मिल जाना चाहिए और मैं पूरी मानना ​​है कि विधि मामले के रूप में झूठी वापसी करनी चाहिए, यह बताता है कि यह केवल तभी सत्य हो सकता है जब मौजूद है और अन्यथा गलत है।

यह अशक्त #facepalm

मेरे क्वेरी स्टार्टअप (कोई QuerySyntaxException) पर गुजरता क्वेरी सिंटैक्स जाँच रिटर्न लेकिन जब निष्पादित अपवाद फेंकता है:

org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for: public abstract boolean findColliding(...) 

क्या मैं गलत कर रहा हूँ? क्या मुझे अपनी समस्या के लिए कुछ और दृष्टिकोण लेना चाहिए?

हाइबरनेट 5.0.11.Final

+0

क्या आप सुनिश्चित हैं कि यह एक हाइबरनेट समस्या है और वसंत डेटा समस्या नहीं है? मैंने बिल्कुल उस प्रश्न की कोशिश नहीं की है, लेकिन मुझे पूरा यकीन है कि मुझे पहले से ही ऐसा काम मिल रहा है। –

उत्तर

6

जेपीए 2.1 मामला अभिव्यक्ति only supports scalar expressions, नहीं किए जाते हैं।

अधिक जानकारी के लिए, JPA specification देखें।

यदि डीबी इस वाक्यविन्यास का समर्थन करता है, तो आपको इसके बजाय a native SQL query का उपयोग करने की आवश्यकता है।

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