मैं एक ग्लासफ़िश v3 ऐप सर्वर पर ईजेबी और जेपीए के साथ काम कर रहा हूं। मेरे पास एक एंटिटी क्लास है जहां मैं @ कॉलम एनोटेशन के साथ अद्वितीय होने के लिए फ़ील्ड में से एक को मजबूर कर रहा हूं।ईजेबी/जेपीए पर्यावरण में स्पष्ट रूप से बाधा उल्लंघन का संचालन?
@Entity
public class MyEntity implements Serializable {
private String uniqueName;
public MyEntity() {
}
@Column(unique = true, nullable = false)
public String getUniqueName() {
return uniqueName;
}
public void setUniqueName(String uniqueName) {
this.uniqueName = uniqueName;
}
}
जब मैं (उम्मीद के रूप में) इस क्षेत्र को एक गैर-अद्वितीय मूल्य मैं एक अपवाद प्राप्त करने के लिए सेट के साथ एक वस्तु लागू करने के लिए जब लेनदेन EJB कंटेनर द्वारा प्रबंधित करता है की कोशिश करो।
1) अपवाद मैं बेकार है "javax.ejb.EJBException:: लेन-देन निरस्त किया गया"
मैं दो समस्याओं मैं चाहता हल करना है। अगर मैं रिकर्सिवली getCause() पर्याप्त बार कहते हैं, मैं अंत में और अधिक उपयोगी "java.sql.SQLIntegrityConstraintViolationException" तक पहुँचते हैं, लेकिन यह अपवाद EclipseLink कार्यान्वयन का हिस्सा है और मैं वास्तव में आरामदायक यह के अस्तित्व पर भरोसा नहीं कर रहा हूँ।
वहाँ जेपीए के साथ विस्तृत त्रुटि जानकारी पाने के लिए एक बेहतर तरीका है?
2) EJB कंटेनर इस त्रुटि लॉग इन करने भले ही मैं इसे पकड़ने और इसे संभाल पर जोर देता है।
वहाँ एक बेहतर तरीका यह त्रुटि जो बेकार अपवाद जानकारी के साथ अपने लॉग को अव्यवस्थित से Glassfish बंद हो जाएगा संभालने के लिए है?
धन्यवाद।
खबरदार @hallidave कि एक 'PersistenceException' लेन-देन संदर्भ अमान्य हो जाएगी और लेनदेन रोलबैक, * यदि आप इसे नहीं पकड़ या कोई फर्क नहीं *। जावाडोक कहते हैं, "नोरसल्ट अपवाद, गैर-अनन्य रिसेल्ट एक्सेप्शन, लॉकटाइम एक्सेप्शन, और क्वेरीटाइमआउट अपवाद के उदाहरणों को छोड़कर पर्सिस्टेंस एक्सेप्शन के सभी उदाहरण रोलबैक के लिए चिह्नित होने के लिए मौजूदा लेनदेन का कारण बनेंगे।" सादा जेडीबीसी के साथ यह एक बड़ा अंतर था कि आप एक अपवाद निगल सकते हैं (आप जो करते हैं उसके आधार पर) और अभी भी प्रतिबद्ध हैं। – ewernli
@ewernli हां, मैं समझता हूं कि लेन-देन वापस ले लिया गया है इससे कोई फर्क नहीं पड़ता - यह वास्तव में केवल स्टैकट्रैक से भरा लॉग है जो मुझे परेशान कर रहा है। आदर्श रूप से, मैं ईजेबी के संदर्भ में अपवाद को पकड़ना चाहता हूं, लेकिन यह तब तक नहीं होता जब तक कंटेनर लेनदेन करता है। मैं सिर्फ लेनदेन के प्रबंधन के बारे में सोच रहा हूं इसलिए मेरा अधिक नियंत्रण है। – hallidave
क्यों बेहतर होगा, अगर ग्रहण लिंक ने 'PersistenceException' फेंक दिया? आपको यह पता लगाने का कोई मौका नहीं था कि क्या हुआ (कौन सा क्षेत्र एक अद्वितीय बाधा का उल्लंघन करता है (आप एक इकाई में अधिक अनूठा क्षेत्र हो सकते हैं)) – pihentagy