2012-04-25 5 views
7

मैं निम्नलिखित HQL का उपयोग कर बूलियन क्षेत्र स्विच करने के लिए कोशिश कर रहा हूँ:नकारना एकल ऑपरेटर

update Entity e set e.booleanField = not e.booleanField where e.id = ?1; 

दुर्भाग्य "QuerySyntaxException: अप्रत्याशित टोकन: निकट नहीं ..." फेंक दिया गया था।

मेरा प्रश्न है: क्या ऐसी अभिव्यक्ति का समर्थन करने वाले हाइबरनेट के लिए कुछ यूनरी ऑपरेटर है? या किसी भी प्रसिद्ध चाल है?

update entity_table set booleanField = not(booleanField); 
+0

[माना जाता है] (http://docs.jboss.org/hibernate/orm/3.3/ संदर्भ/एन/एचटीएमएल/queryhql.html # queryhql-expressions) एचक्यूएल अभिव्यक्तियों में 'नहीं 'का समर्थन करता है, लेकिन मुझे यकीन नहीं है कि यह' कहां 'खंड के बाहर अभिव्यक्तियों पर लागू होता है। आप इस समस्या के आसपास काम करने के लिए एक सामान्य हैक 'सेट e.booleanField = 1 - e.booleanField' आज़मा सकते हैं। – dasblinkenlight

+0

क्षमा करें, काम नहीं करता है। "त्रुटि: ऑपरेटर मौजूद नहीं है: पूर्णांक - बूलियन" –

+3

यहां 'नहीं' व्यक्त करने का एक और हैक तरीका है: 'e.booleanField = सेट करें (e.booleanField == false) '। – dasblinkenlight

उत्तर

1

मैं सिर्फ इस बात के लिए एक देशी SQL क्वेरी का प्रयोग करेंगे:

एसक्यूएल इस तरह के प्रश्नों (PostgreSQL) का समर्थन करता है।

2

HQL के तहत बूलियन संपत्ति, not एकल ऑपरेटर के बराबर, टॉगल करने के लिए/JPQL, उपयोग:

UPDATE entity e SET e.booleanField = (e.booleanField=false)