2012-07-11 13 views
5

मैं Oracle को जावा में एक इकाई का एक प्रगणित विशेषता का अशक्त मान संग्रहीत जेपीए TopLink का उपयोग कर डेटाबेस कोशिश कर रहा हूँ। कोड को कोई अपवाद या चेतावनी के साथ निष्पादित किया गया है, लेकिन इकाई डेटाबेस में संग्रहीत नहीं है।क्या डेटाबेस में एक समेकित विशेषता के शून्य मान को स्टोर करना संभव है?

@Entity 
public class LetterDoc { 
    ... 
    @Column(name = "delivery_type", columnDefinition = "VARCHAR2(20)", nullable = true) 
    @Enumerated(EnumType.STRING) 
    private DocDeliveryTypeEnum deliveryType; 
    ... 
} 

Enum वर्ग DocDeliveryTypeEnum केवल मान आवश्यक है:

इकाई के रूप में निम्नानुसार परिभाषित किया गया है।

public enum DocDeliveryTypeEnum { 
    NORMAL, 
    RECOMMENDED, 
    ACKNOWLEDGEMENT 
} 

मेरी स्थिति में, मेरे पास ऐसी संस्थाएं हैं जहां डिलीवरी टाइप टाइप करता है और इसकी आवश्यकता होती है। हालांकि, कुछ मामलों के लिए, डिलीवरी टाइप अप्रासंगिक है और मैं इसे शून्य छोड़ना चाहता हूं। मैं एक डिफ़ॉल्ट मान निर्धारित नहीं करना चाहता क्योंकि इस मामले के लिए पर्याप्त मूल्य नहीं है।

इकाई आवृत्ति के मान को शून्य पर सेट किया गया है, लेकिन जब मैं डेटाबेस में इंस्टेंस को जारी रखने और फ्लश करने का प्रयास करता हूं, तो यह अभी संग्रहीत नहीं होता है, हालांकि कॉलम को VULARR2 (20) के रूप में परिभाषित किया जाता है जिसमें पूर्ण मान सक्षम होता है।

LetterDoc let = new LetterDoc(); 
// settery ostatnich atributu 
let.setDeliveryType(null); 
try { 
    emptyDocDAO.persist(let); 
    emptyDocDAO.flush(); 
} catch (Exception e) { 
    // no exception is really catched :(
    log.error(e); 
} 
// here I have the id of the entity 

सच भी इसका अपवाद नहीं है, जबकि बने बस इकाई संग्रहीत नहीं है फेंक दिया जाता है:

स्थिति कुछ इस तरह है। जब मैं आईडी द्वारा बाद में किसी अन्य धागे में इकाई प्राप्त करने का प्रयास करता हूं, तो यह NoResultException के साथ विफल रहता है।

क्या इस काम को करने का कोई मौका है, या क्या मुझे वास्तव में जारी रखने से पहले सभी समृद्ध विशेषताओं के लिए मूल्य निर्धारित करना होगा? क्या मुझे वास्तव में एनम कक्षा में एक डिफ़ॉल्ट मान बनाना है?

मैंने एक डिफ़ॉल्ट मान निर्धारित करके अपनी समस्या हल कर दी है जो विशेष स्थिति में ज्यादा समझ नहीं लेती है। हालांकि, मुझे आश्चर्य है कि कोई अन्य विकल्प है या नहीं।

आपके अनुभव और सलाह के लिए बहुत बहुत धन्यवाद।

+2

यह कॉलम में शून्य को सहेजने में सक्षम होना चाहिए। वह कोड दिखाएं जहां आप इसे करने का प्रयास करते हैं, और आपके द्वारा प्राप्त अपवाद का पूरा स्टैक ट्रेस दिखाएं। –

+0

इस सदस्य में आपका प्रयास करें: कॉलमडिफिनिशन = "char (20) डिफ़ॉल्ट 'न्यूल'" – shem

+0

@ जेबीनिज़ेट: मुझे वास्तव में कोई अपवाद नहीं मिला है। मुझे सबसे ज्यादा आश्चर्य है :( – Sharg

उत्तर

1

हां, आप एक enum विशेषता के लिए शून्य स्टोर कर सकते हैं।

मैं नहीं देख सकता कि आप कुछ भी कैसे प्राप्त कर सकते हैं, यह एक अपवाद है कि आप पकड़ नहीं रहे हैं?

बेहतरीन पर लॉगिंग सक्षम करें और लॉग और अपना कोड शामिल करें, और किसी भी अपवाद को पकड़ें और स्टैक ट्रेस शामिल करें।

+1

मैंने यह दिखाने के लिए कुछ और कोड जोड़ा कि मैं इकाई को कैसे स्टोर करता हूं।हालांकि, अपवाद को पकड़ते समय भी कुछ भी नहीं फेंक दिया जाता है: – Sharg

0

कोड को NullPointerException को फेंकना चाहिए क्योंकि आप enum के लिए शून्य मान को सहेजने की कोशिश कर रहे हैं। Enum.valueOf() विधि नाम शून्य होने पर NullPointerException फेंकता है।

let.setDeliveryType (शून्य);

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

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