2010-02-25 8 views
5

से इसे चुने बिना जेपीए-हाइबरनेट इकाई को अद्यतन करना मेरे पास निष्पादन नामक एक हाइबरनेट इकाई है। यह मेरी प्रक्रिया की शुरुआत में बनाया गया है और अंत में अपडेट किया गया है, यह दर्शाता है कि यह कैसे समाप्त हो गया है।डेटाबेस

मैं अपने डेटाबेस में चयन किए बिना, इस इकाई की एक एकल संपत्ति को अपडेट करना चाहता हूं।

Execution execution = entityManager.getReference(Execution.class, executionId); execution.setStatus(Status.FINISHED); // -> इस विधि को कॉल करना मेरे डेटाबेस में एक चयन को सक्रिय करता है। मैं नहीं चाहता था कि मैं ऐसा करूं, मैं बस अपनी इकाई को अपडेट करना चाहता हूं।

यह इस विधि के लिए विशिष्ट नहीं है, किसी भी अन्य विधि को एक चयन खंड में परिणाम कहा जाता है। वास्तव में, मेरी विधि कहने से पहले भी चयन होता है। मेरी धारणा यह है कि हाइबरनेट प्रॉक्सी ने मेरे क्लास नो-एर्ग्स इंस्ट्रक्टर के अंदर कुछ कोड डाला है, हर बार किसी भी विधि को चुनने के लिए चुनने के लिए।

क्या मेरे डेटाबेस में एक SELECT स्टेटमेंट को फायर किए बिना जेपीए/हाइबरनेट इकाइयों को अपडेट करना संभव है?

उत्तर

1

इस प्रकार हाइबरनेट काम करता है। जब भी कोई गैर-आईडी संपत्ति एक्सेस की जाती है तो इसकी प्रॉक्सी ऑब्जेक्ट डीबी से असली ऑब्जेक्ट लोड करती है।

अपनी प्रक्रिया की शुरुआत में ऑब्जेक्ट को सहेजने/लोड करने का प्रयास करें (SELECT निष्पादित करने के लिए), और सुनिश्चित करें कि कोई ऑब्जेक्ट स्पर्श होने पर सत्र ऑटो-फ्लश नहीं होता है (मुझे लगता है कि डिफ़ॉल्ट व्यवहार कोई ऑटो-फ्लश नहीं है , लेकिन यह एक चेक के लायक है)।

या आप प्रोसेसिंग के दौरान हाइबरनेट सत्र से अपनी ऑब्जेक्ट को अलग करने का भी प्रयास कर सकते हैं।

+1

मैं इस उत्तर को सही के रूप में स्वीकार करूंगा। जेपीए-क्यूएल थोक अद्यतन/सम्मिलित करें http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/batch.html#batch-direct – user266391

+0

का उपयोग करके मैं जो चाहता हूं उसके लिए एक आसान समाधान में आया @ user266391 मैं जेपीए से परिचित नहीं हूं इसलिए लिंक के लिए धन्यवाद :-) –