2011-08-08 22 views
6

मैं एक परिदृश्य मिले हैं: हाइबरनेट द्वारा लक्ष्य तालिका मेंडाटाबेस ट्रिगर और हाइबरनेट

  1. save या update कुछ डेटा
  2. लक्ष्य मेज पर एक ट्रिगर जो insert या update से पहले निष्पादित किया जाएगा है हाइबरनेट द्वारा लक्ष्य तालिका
  3. select के संचालन इस रिकॉर्ड बाहर

लेकिन मुझे लगता है कि ट्रिगर द्वारा संशोधित किए गए फ़ील्ड वास्तव में बाहर नहीं लाए जाते हैं। क्या यह हाइबरनेट (फ्लश() को पहले से ही बुलाया जा सकता है) या लेन-देन से संबंधित है? धन्यवाद।

उत्तर

4

यह पहले (सत्र) या दूसरे (जैसे ehcache) कैश दोनों के कारण हो सकता है। इकाई को फिर से पढ़ने के लिए, आपको session.refresh() को कॉल करने की आवश्यकता होगी।

hibernate docs से (वर्ग के नीचे)

यह एक वस्तु है और किसी भी समय में अपने सभी संग्रह, ताज़ा() पद्धति का उपयोग करके फिर से लोड करने के लिए संभव है। यह तब उपयोगी होता है जब डेटाबेस ट्रिगर्स का उपयोग ऑब्जेक्ट के कुछ गुणों को प्रारंभ करने के लिए किया जाता है।

sess.save(cat); 
sess.flush(); //force the SQL INSERT 
sess.refresh(cat); //re-read the state (after the trigger executes) 
9

आप generated values के रूप में गुण मैप कर सकते हैं। ये मान हमेशा डेटाबेस से आते हैं और संग्रहीत नहीं किए जा सकते हैं। हाइबरनेट स्वचालित रूप से डेटाबेस को डालने या अद्यतन करने के बाद बाद में क्वेरी में इन मानों को लोड करता है।

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