2012-01-03 22 views
6

मैं जेपीए/हाइबरनेट (उन पर एक नौसिखिया) का उपयोग कर रहा हूं। जब कोई अपवाद होता है (एक अनोखा बाधा उल्लंघन हो सकता है) मैं इसे पकड़ना चाहता हूं और स्टैक ट्रेस प्रिंट करने के बजाय कुछ एप्लिकेशन अर्थ संदेश दिखा सकता हूं।जेपीए/हाइबरनेट अपवाद हैंडलिंग

क्या हाइबरनेट अपवादों के बारे में जानकारी (शायद डेटाबेस स्वतंत्र) प्राप्त करने के लिए कुछ टूल प्रदान करता है?

उत्तर

4

हाइबरनेट एक्सेप्शन वास्तविक रूट कारण को समेकित करता है, जिससे आप सार्थक उपयोगकर्ता के अनुकूल संदेश उत्पन्न करने के लिए पर्याप्त जानकारी प्रदान कर सकते हैं। उनके दस्तावेज़ों के Exception Handling अनुभाग पढ़ें।

0

हाइबरनेट में सभी अपवाद जावा की रनटाइम अपवाद वर्ग के डेरिवेटिव हैं। इसलिए यदि आप अपने कोड में रनटाइम अपवाद पकड़ते हैं, तो आप अपवाद वर्ग 'getCause() या getMessage() विधियों

1

पर कॉल करके अपवाद का कारण प्राप्त कर सकते हैं, आप विशेष रूप से org.hibernate.exception.ConstraintViolationException को पकड़ सकते हैं। इस तरह आप जानते हैं कि आप केवल बाधा मुद्दों को पकड़ रहे हैं।

2

आप सामान्य JDBCException पकड़ कर सकते हैं या तो:

try { 
    userDao.save(user); //might throw exception 
} catch(JDBCException e) { 
    //Error during hibernate query 
} 

या आप भी JDBCException ऐसे ConstraintViolationException के रूप में या JDBCConnectionException के अधिक विशिष्ट उपवर्गों में से एक को पकड़ कर सकते हैं:

try { 
    userDao.save(user); //might throw exception 
} catch(ConstraintViolationException e) { 
    //Email Address already exists 
} catch(JDBCConnectionException e) { 
    //Lost the connection 
} 

और साथ e.getCause() विधि आप अंतर्निहित SQLException पुनर्प्राप्त कर सकते हैं और इसे आगे विश्लेषण कर सकते हैं:

try { 
    userDao.save(user); //might throw exception 
} catch(JDBCException e) { 
    SQLException cause = (SQLException) e.getCause(); 
    //evaluate cause and find out what was the problem 
    System.out.println(cause.getMessage()); 
} 

कौन सा उदाहरण के लिए मुद्रित होगा: Duplicate entry 'UserTestUsername' for key 'username'

2

आपको निम्न रूप से कर सकते हैं। मैंने वह किया। लेकिन अगर आप विक्रेता विशिष्ट कोड का उपयोग कर रहे हैं तो अगर आप एक अलग जेपीएस प्रदाता के साथ जाते हैं, तो आपको कई जगहों पर कोड बदलना होगा। साथ ही, कभी-कभी इसका व्यावहारिक जब आप जानते हैं कि आप आसानी से जेपीए प्रदाता को बदलने वाले नहीं हैं और उपयोगकर्ता के अनुकूल त्रुटि संदेश अधिक महत्वपूर्ण हैं

try{ 
... 
} 

catch(javax.persistence.PersistenceException ex) 

{ 

    if(ex.getCause() instanceof org.hibernate.exception.ConstraintViolationException) 

     {..........} 

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