2011-12-10 19 views
7

मैं हाइबरनेट के साथ MySQL डेटाबेस का उपयोग कर रहा हूं और कुछ एनम फ़ील्ड हैं जो पूर्ण या खाली मानों को अनुमति देते हैं। जब तक कोई प्रश्न नहीं बनाया जाता है तब तक यह ठीक है और हाइबरनेट परिभाषित एनम पर खाली मूल्य को मैप करने का प्रयास करता है। मैं एनम में एक मान परिभाषित करने में असमर्थ हूं जो काम करेगा, क्योंकि एनम सफेद-रिक्त स्थान की अनुमति देता है।हाइबरनेट, MySQL, Enum, और NULL

Enum वर्ग:

private enum ObjType { 
    itemA, 
    itemB, 
    NULL 
} 

यह एक सदस्य के रूप में शून्य लेता है लेकिन वह मदद नहीं करता है। मैं ईई जावा के लिए नया हूं, और किसी भी मदद की सराहना करता हूं। धन्यवाद

उत्तर

2

आप अपने enum जिस स्थिति में मैप किया जाएगा अगर यह होता है null या empty space

package com.test; 

import java.util.HashMap; 

public class Brand{ 
    private static HashMap<String,BrandName> map = new HashMap<String,BrandName>(); 
public enum BrandName { 
    HERO("hero"),HONDA("honda"),UNKNOWN("default"); 

    private String value = null; 

    private BrandName(String value){ 
     this.value = value; 
     addToMap(); 
    } 

    private void addToMap(){ 
     map.put(this.value, this); 
    } 

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

    public static BrandName fromValue(String value){ 
     return map.get(value) != null ? map.get(value) : map.get("default"); 
    } 
} 
} 

fromValue विधि का उपयोग करके आप मूल्य से enum वस्तु प्राप्त कर सकते हैं करने के लिए एक unknown या default या invalid मूल्य जोड़ सकते हैं। toString विधि का उपयोग करके आप एक एनम ऑब्जेक्ट का मूल्य प्राप्त कर सकते हैं। map में एनम ऑब्जेक्ट मैपिंग के लिए मूल्य होगा। यदि null या empty space जैसे मान नक्शे में मौजूद नहीं हैं, तो नक्शा शून्य वापस आ जाएगा और उस स्थिति में विधि fromValueUNKNOWN enum ऑब्जेक्ट लौटाएगी।

System.out.println(Brand.BrandName.HERO.toString()); 
     System.out.println(Brand.BrandName.fromValue("").toString()); 
     System.out.println(Brand.BrandName.fromValue(null).toString()); 
     System.out.println(Brand.BrandName.fromValue("honda").toString()); 
+0

मैपिंग कैसे करूँ? – Loke

+0

कोड जोड़ा गया .. यह एक emun का उपयोग करने के लिए उचित और लचीला तरीका है। –

+0

यह एक अच्छा समाधान की तरह दिखता है। धन्यवाद। – Loke

3

आप कॉलम को अपनी इकाई में न्यूल एनम फ़ील्ड में सेट करने के लिए डिफ़ॉल्ट मान का उपयोग कर सकते हैं।

@Enumerated(EnumType.STRING) 
@Column(name="obj_type", columnDefinition="char(20) default 'NULL'") 
ObjType objType; 

और मौजूदा पंक्तियों को अपडेट करें।

update table set obj_type='NULL' where obj_type IS NULL 

बीटीडब्ल्यू मैं एनम फ़ील्ड को अज्ञात कहूंगा क्योंकि इसे डीबी न्यूल-वैल्यू के साथ भ्रमित किया जा सकता है।

+1

यह काम करेगा, लेकिन मैं एक गैर-घुसपैठ समाधान की तलाश में हूं, मामलों के लिए जब मैं मूल डेटा को संशोधित नहीं करना चाहता हूं। – Loke

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