2013-07-05 7 views
12

के लिए अज्ञात नाम मान डीबी से रिकॉर्ड्स पुनर्प्राप्त करने का प्रयास करते समय मुझे enum क्लास के लिए अज्ञात नाम मान प्राप्त हो रहा है। जेएसएफ 2.0, जेपीए का प्रयोग करना।हाइबरनेट अपवाद: एनम कक्षा

मेरी DB में संभावित मान 'एफ' या 'जे'

Enum हैं:

public enum TipoPessoa { 

    FISICA ("F", "Física"), 
    JURIDICA ("J", "Jurídica"); 

    private final String id; 
    private final String descricao; 

    private TipoPessoa(String id, String descricao){ 
     this.id = id; 
     this.descricao = descricao; 
    } 

    public String getId() { 
     return id; 
    } 

    public String getDescricao(){ 
     return descricao; 
    } 
} 

इकाई:

@Column(nullable=false, length=1) 
private TipoPessoa tipoPessoa; 

public TipoPessoa getTipoPessoa() { 
    return tipoPessoa; 
} 

public void setTipoPessoa(TipoPessoa tipoPessoa) { 
    this.tipoPessoa = tipoPessoa; 
} 

जब मैं पढ़ने की कोशिश डीबी से रिकॉर्ड मुझे त्रुटि मिली

क्या आप इस मुद्दे पर मेरी मदद करेंगे? धन्यवाद

स्टैक ट्रेस: ​​

javax.servlet.ServletException: enum वर्ग br.com.aaa.xxx.entidade.TipoPessoa के लिए अज्ञात नाम मूल्य: एफ javax.faces.webapp.FacesServlet.service (FacesServlet.java:606) br.com.aaa.filtro.FiltroEncode.doFilter (FiltroEncode.java:26) मूल कारण

javax.ejb.EJBTransactionRolledbackException: enum वर्ग br.com.aaa के लिए अज्ञात नाम मूल्य। xxx.entidade.TipoPessoa: एफ .... ......

+0

स्टैकट्रैक – surfealokesea

+0

दिखाएं आप मैपिंग गलत कर रहे हैं। हाइबरनेट को एनम प्रकार को कैसे मैप करना है, यह कैसे पता होना चाहिए? उदाहरण देखें [यह SO सवाल] (http://stackoverflow.com/questions/417062/enumerations-in-hibernate)। –

+0

@surfealokesea stacktrace प्रश्न में अद्यतन किया गया। – Al2x

उत्तर

17

हाइबरनेट आपके enum के अंदर आईडी फ़ील्ड को नहीं जानता और उसकी परवाह नहीं करता है। यह सब सामान्य मूल्य (0 और 1) और नाम (फिशिका और जुरिडिका) के बारे में जानता है। आप एफ और जम्मू बनाए रखना चाहते हैं, तो आप एफ और जम्मू के लिए अपने दो enum स्थिरांक नाम बदलने के लिए होगा, और इस तरह इकाई में क्षेत्र व्याख्या:

@Column(nullable=false, length=1) 
@Enumerated(EnumType.STRING) 
private TipoPessoa tipoPessoa; 

या एफ को बदलने के लिए एक कस्टम उपयोगकर्ता प्रकार का उपयोग करें फिशिका या इसके विपरीत।

+1

क्या आपने FISICA को F और JURIDICA में जे का नाम बदल दिया था? हमें अपना अपडेटेड कोड दिखाएं। –

+0

बहुत अच्छा है। अपेक्षित के रूप में काम किया। लेकिन मैं एफ या जे के बजाय पूर्ण नाम देने के लिए कैसे कर सकता हूं? – Al2x

+1

एक कस्टम उपयोगकर्ता प्रकार का उपयोग करें: http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html_single/#types-custom –

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