2013-10-23 9 views
10

मेरे मॉडल वर्ग (टुकड़ा):एनम प्रकार को लोअरकेस स्ट्रिंग के रूप में कैसे स्टोर करें?

public class User ... { 

    @Enumerated(STRING) 
    private Status status; 

    ... 

    public enum Status { 

     ACTIVE, 
     INACTIVE; 

     @Override 
     public String toString() { 
      return this.name().toLowerCase(); 
     } 
    } 

    ... 

    public String getStatus() { 
     return status.name().toLowerCase(); 
    } 

    public void setStatus(Status status) { 
     this.status = status; 
    } 
} 

जैसा कि आप देख ऊपर मैं toString विधि ओवरराइड, लेकिन कोई प्रभाव नहीं। डेटाबेस में गणना स्टोर ACTIVE या INACTIVE के रूप में।

पीएस मैं हाइबरनेट जेपीए

सहायता के लिए धन्यवाद का उपयोग करें!

पीएसएस मैं पूछता हूं क्योंकि मैं आरएसटी सेवा लिखता हूं जो जेसन (जेसन ऑब्जेक्ट में बेहतर केस का उपयोग करता है, अगर मैं गलती नहीं करता)

+0

आपका कोड मेरे लिए काम करता है। 'toString' और 'getStatus' दोनों लोअरकेस तार लौटाते हैं। क्या आप सुनिश्चित हैं कि आप जेसन का निर्माण करते समय 'name()' को कॉल नहीं कर रहे हैं? – Tobber

+0

@ बिटेनस, मैं डेटाबेस में एनमस को लोअरकेस स्ट्रिंग के रूप में स्टोर करने का प्रयास करता हूं। – eugenes

+0

1. क्या आप enum को पार्स करने के लिए लाइब्रेरी का उपयोग कर रहे हैं या क्या आप इसे स्वयं पार्स कर रहे हैं? 2. क्या कोड, जो 'नाम() 'या' toString' का उपयोग कर डेटाबेस के लिए enum पारदर्शी है? – Tobber

उत्तर

7

एक converter वर्ग, @Converter साथ उसकी व्याख्या, जो javax.persistence.AttributeConverter<YourEnum, String> लागू करता लिखें। दो विधियां हैं:

public String convertToDatabaseColumn(YourEnum attribute){..} 
public YourEnum convertToEntityAttribute(String dbData) {..} 

वहां आप अपना ऊपरी/निचला मामला तर्क लागू कर सकते हैं।

बाद में आप दिए गए कनवर्टर का उपयोग करने के लिए अपने क्षेत्र को एनोटेट कर सकते हैं।

+1

धन्यवाद, केंट। इससे मुझे मदद मिली। बस इसे पूरा करने के लिए, क्योंकि मुझे इसके लिए खोजना पड़ा: इस तरह कनवर्टर कार्यों का उपयोग करने के लिए फ़ील्ड को एनोटेट करना: '@ कॉलम'' @ कन्वर्ट (कनवर्टर = YourEnumConverter.class) ' – Buka

+0

@ बुका सही! साथ ही, ध्यान दें कि यदि आप 'कनवर्ट' का उपयोग करते हैं तो आपको '@ एन्युमेटेड 'को हटा देना चाहिए, अन्यथा कनवर्टर को अनदेखा किया जाता है – kiedysktos

0

सर्वोत्तम अभ्यास एनम स्थिरांक के लिए ऊपरी मामले का उपयोग करना है।

मैं दो विकल्प

  1. देख enum में लोअर केस (नहीं एक अच्छा अभ्यास)
  2. बदलें इस enum का उपयोग कर लोअर केस वापस जाने के लिए सेम के गेटर विधि (getStatus विधि) का प्रयोग करें। (सबसे अच्छा संभव विकल्प)
+0

परिभाषित नहीं है गेटटर विधि में मैं स्थिति गणना वापस करता हूं। मैं रिटर्न टाइप को स्ट्रिंग में बदलता हूं और वापसी स्थिति में बदल जाता हूं .name()। ToLowerCase(), लेकिन अभी भी कोई प्रभाव नहीं है। क्षमा करें – eugenes

+0

क्या आप गेटर विधि के कोड की प्रतिलिपि बना सकते हैं? –

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