मुझे यकीन नहीं है कि यह आपकी स्थिति में मदद करेगा (अर्थात यदि यह अभी भी मौजूद है), हालांकि, इसी तरह की समस्या के लिए वेब को खंगालने के बाद।
मैं एक अद्यतन करने के लिए एक दृढ़ता EntityManager से एक मूल क्वेरी बना रहा था।
Query query = entityManager.createNativeQuery(queryString);
मुझे निम्न त्रुटि प्राप्त हो रही थी:
<ब्लॉकक्वॉट>इसके कारण:javax.persistence.TransactionRequiredException:निष्पादन अद्यतन/क्वेरी हटाएं
कई समाधान आपके तरीके में @Transactional जोड़ने का सुझाव देते हैं। बस ऐसा करने से त्रुटि नहीं बदली।
कुछ समाधान EntityManager से EntityTransaction
. के लिए पूछने का सुझाव देते हैं ताकि आप start को कॉल कर सकें और खुद को कमिट कर सकें। यह एक और एरर फेंकता है:
इसके कारण:java.lang.IllegalStateException:साझा EntityManager पर लेन-देन बनाने की अनुमति नहीं है - इसके बजाय स्प्रिंग लेनदेन या EJBCMT का उपयोग करें
मैंने तब एक विधि की कोशिश की, जो अधिकांश साइटों का कहना है कि उपयोग अनुप्रयोग प्रबंधित इकाई प्रबंधकों के लिए है न कि कंटेनर प्रबंधित (जो मुझे विश्वास है कि वसंत है) और वह था joinTransaction()
।
@Transactional
होने के कारण विधि को सजाना और फिर कॉल करना joinTransaction()
कॉल करने से ठीक पहले EntityManager ऑब्जेक्ट पर query.executeUpdate()
और मेरे मूल क्वेरी अपडेट ने काम किया।
मुझे उम्मीद है कि इससे किसी और को इस समस्या का सामना करने में मदद मिलेगी।