2012-12-17 30 views
5

SQL करने के लिए यहाँ ntranslated नहीं मेरी HQL है:कोष्ठक

delete from `email` where `status`=? and `creation_time`<=? or `status`=? and `attempts`>=? 

प्रश्न:: क्यों कोष्ठक एसक्यूएल में नहीं हैं

Query query = createQueryOnCurrentSession("DELETE Email e " + 
       "where " + 
       "(status = :sent and creationTime <= :creation)" + 
       "or " + 
       "(status = :error and maxEttempts >= :maxEttempts)"); 

यहाँ उत्पन्न एसक्यूएल है?

delete from `email` where (`status`=? and `creation_time`<=?) or (`status`=? and `attempts`>=?) 

के रूप में वैकल्पिक मैं 2 अनुरोधों में नष्ट करेगा हो सकता है: मैं इसे होने की उम्मीद है?

delete from `email` where `status`=? and `creation_time`<=? 
delete from `email` where `status`=? and `attempts`>=? 
+0

की तरह तो कोष्ठकों से बचने की कोशिश का पालन करें: '\ (' –

+0

एकल '" \ ("' संकलित नहीं करता है (निश्चित रूप से) और डबल '" \\ ("' अपवाद फेंक दें: 'org.hibernate.QueryException: अप्रत्याशित चार:' \ '[हटाएं com.grroo.model.Email e जहां \ (स्थिति =: भेजा और निर्माण समय <=: निर्माण \) या \ (स्थिति =: त्रुटि और प्रयास> =: maxAttempts \)] ' – urir

+0

मुझे लगता है कि आप आपकी स्थिति के रूप में क्वेरी स्ट्रिंग को जोड़ सकते हैं और फिर –

उत्तर

8

यह वास्तव में एक विशेषता है।

andor से अधिक है, हाइबरनेट इसे जानता है, और ब्रैकेट को हटा देता है।

आपको वहां उन ब्रैकेट की आवश्यकता नहीं है।

+0

निष्पादित कर सकते हैं मुझे पता है कि यह कुछ डेटाबेस में ऐसा है ... लेकिन क्या यह सभी डीबी के लिए मानक है जिसका मैं कभी भी उपयोग करूंगा? क्या आप कृपया संदर्भ दे सकते हैं? मुझे यह नहीं मिला ... – urir

+0

मुझे यकीन नहीं है कि यह एक निश्चित मानक है, लेकिन डीबी इसका उपयोग इस तरह करना चाहिए। – Jaanus

+0

यह वास्तव में मुझे क्या परेशान करता है। शायद ब्रैकेट छोड़ने के लिए हाइबरनेट को बताने का तरीका है? – urir

2

तार्किक ऑपरेटर और तार्किक ऑपरेटर या

ऑपरेटर पूर्वता के लिए

से श्रेष्ठता के उच्च आदेश है, लिंक

http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html 
http://msdn.microsoft.com/en-us/library/ms190276.aspx 

http://docs.oracle.com/html/A85397_01/operator.htm#997691 
+0

यहां केवल सबसे बड़े 3 डीबी प्रदाता हैं, जो मानक का उपयोग करते हैं। – Jaanus

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