हाइबरनेट एक ConstraintViolationException
फेंक सकता है जब आप एक ऐसी पंक्ति डालने का प्रयास करते हैं जो एक बाधा को तोड़ती है (एक अद्वितीय बाधा सहित)। यदि आपको वह अपवाद नहीं मिलता है, तो आपको कुछ अन्य सामान्य हाइबरनेट अपवाद मिल सकते हैं - यह हाइबरनेट के संस्करण और हाइबरनेट की क्षमता पर निर्भर करता है कि आप जिस संस्करण और डेटाबेस का उपयोग कर रहे हैं उसमें हाइबरनेट अपवाद के लिए MySQL अपवाद को मैप करें ( मैंने हर चीज पर इसका परीक्षण नहीं किया है)।
कॉल करने के बाद ही आपको अपवाद मिलेगा flush()
, इसलिए आपको यह सुनिश्चित करना चाहिए कि यह आपके ट्राइ-कैच ब्लॉक में भी है।
मैं उन समाधानों को लागू करने में सावधान रहूंगा जहां आप जांचते हैं कि पंक्ति पहले मौजूद है। यदि एकाधिक सत्र एक साथ तालिका को अद्यतन कर रहे हैं तो आपको दौड़ की स्थिति मिल सकती है। यह देखने के लिए कि क्या यह मौजूद है, दो प्रक्रियाएं लगभग एक ही समय में पंक्ति को पढ़ती हैं; वे दोनों पता लगाते हैं कि यह वहां नहीं है, और फिर वे दोनों एक नई पंक्ति बनाने का प्रयास करते हैं। रेस कौन जीतता है इसके आधार पर कोई असफल हो जाएगा।
एक बेहतर उपाय यह है कि पहले सम्मिलित करने का प्रयास किया जाए और यदि यह विफल हो जाए, तो मान लें कि यह पहले से ही था। हालांकि, एक बार आपके पास अपवाद होने के बाद आपको वापस रोल करना होगा, जिससे यह सीमित हो जाएगा कि आप इस दृष्टिकोण का उपयोग कैसे कर सकते हैं।