2010-08-03 20 views
5

मेरे पास एक मौजूदा डेटाबेस है जिसे मैं अब हाइबरनेट का उपयोग करने के लिए कनेक्ट कर रहा हूं। मैं फिलहाल इसमें डेटा नहीं बदल सकता और सब कुछ एक कॉलम से अलग काम कर रहा हूं।हाइबरनेट एनम मैपिंग एनोटेशन का उपयोग करके

  • नई
  • में भेज दिया
  • बाहर

और स्तंभ के रूप में निम्नानुसार मैप किया गया है:

मैं एक स्थिति कॉलम मानों है

@Column(name = "STATUS", nullable = false, length = 50) 
@Enumerated(EnumType.STRING) 
private TeamMemberStatus status; 

मैं जावा कॉलम (टीममेम्बरस्टैटस), के रूप में इस कॉलम को मैप करने के लिए वास्तव में (एप्लिकेशन कारणों के लिए) पसंद करूंगा, लेकिन इस तथ्य के कारण कि 'नया' जावा में कोई कीवर्ड है, इसलिए मुझे यह एनम सदस्य नहीं हो सकता है।

यदि मेरे पास enum contstants है, तो नया, मैलाइड, इन और आउट हाइबरनेट एनमटाइप के अंदर विफल रहता है, यह Enum.valueOf() करता है।

क्या कोई जटिल उपयोगकर्ता टाइप टाइप किए बिना मेरे एनम में इसे मैप करने का कोई तरीका है?

- जोड़ा सामग्री

मेरे इस तरह Enum:

public enum TeamMemberStatus { 
    NEW, MAILED, IN, OUT 
} 

एक वैध जावा enum है, लेकिन डेटाबेस के मामले मिलान नहीं। यदि मैं इसे डेटाबेस से मेल खाने के लिए बदलता हूं जैसे:

public enum TeamMemberStatus { 
    new, mailed, in, out 
} 

यह 'नया' जावा आरक्षित शब्द के रूप में संकलित नहीं होगा।

उत्तर

2

आप डेटाबेस पर किसी SQL ऊपरी बयान का उपयोग कर सकते हैं, तो यह किसी भी प्रयोक्ता प्रकार

अद्यतन

ठीक है, यह नहीं है सबसे अच्छा समाधान हो सकता है का उपयोग किए बिना काम करेगा लेकिन यह हल करती है कि आप क्या चाहते

@Entity 
public class WrapperEntity { 

    private TeamMemberStatus memberStatus; 

    @Transient 
    private TeamMemberStatus getMemberStatus() { 
     return this.memberStatus; 
    } 

    public void setMemberStatus(TeamMemberStatus memberStatus) { 
     this.memberStatus = memberStatus; 
    } 

    @Column(name="STATUS", nullable=false, length=50) 
    public String getMemberStatusAsString() { 
     return memberStatus.name().toLowerCase(); 
    } 

    public void setMemberStatusAsString(String memberStatus) { 
     this.setsetMemberStatus(TeamMemberStatus.valueOf(memberStatus.toUpperCase())); 
    } 

}

+0

मुझे लगता है कि आप डेटाबेस में डेटा को बदलने का मतलब है? अद्यतन तालिका सेट स्थिति = ऊपरी (स्थिति) जैसे कुछ। मैं ऐसा नहीं कर सकता क्योंकि यह मौजूदा अनुप्रयोगों को तोड़ देगा जो उस डेटा से बात करते हैं जो इसे लोअरकेस मान के रूप में अपेक्षा करता है। – stevemac

+0

@stevemac अपडेट किया गया –

+0

जो मैंने अंत में काम किया था, मूल रूप से स्ट्रिंग को आंतरिक रूप से स्टोर करते हैं और प्राप्त/सेट के कॉल होने पर इसे एनम से/मानचित्र पर मैप करते हैं। इसे अल्प अवधि के लिए करना होगा, जब तक कि मैं अपरकेस स्थिरांक का उपयोग करने के लिए अद्यतन सभी ऐप्स प्राप्त नहीं कर सकता। – stevemac

1

यदि आपके डेटाबेस मान "नया", "मेल", "इन" और "आउट" हैं तो आपके एनम को बिल्कुल वही नाम चाहिए। - मुझे विश्वास है कि समस्या यह है कि आपके Enums पूंजी अक्षरों में हैं लेकिन आपके डेटा बेस मान नहीं है।

+1

वास्तव में समस्या यह है कि, लेकिन मैं नहीं कर सकते हैं ae लोअरकेस में नए मान के साथ num क्योंकि यह जावा में एक आरक्षित शब्द है। – stevemac

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