2013-07-05 18 views
12

DBからレコードを取得しようとしたときに、列挙型クラスのUnknown nameの値を取得しています。 jsf 2.0、jpaを使用します。私のDBでHibernate Exception:列挙型クラスの不明な名前の値

可能な値は、 'F' または 'J'

列挙されている:

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; 
} 

DBからのレコードエラーが発生しました

この問題で私を助けてくれませんか?おかげ

スタックトレース:

javax.servlet.ServletException:列挙型クラスbr.com.aaa.xxx.entidade.TipoPessoaのため不明な名前の値:F javax.faces.webapp.FacesServlet.service( FacesServlet.java:606) br.com.aaa.filtro.FiltroEncode.doFilter(FiltroEncode.java:26) 根本原因

javax.ejb.EJBTransactionRolledbackException:列挙型クラスbr.com.aaaのため不明な名前の値。 xxx.entidade.TipoPessoa:F .... ......

+0

stacktraceを表示 – surfealokesea

+0

マッピングを間違っています。 Hibernateは列挙型のマッピング方法をどのように知っているべきですか?例えば、 [このような質問](http://stackoverflow.com/questions/417062/enumerations-in-hibernate)。 –

+0

@surfealokesea stacktraceが更新されました。 – Al2x

答えて

17

Hibernateはあなたのenumの中のidフィールドについて知らず気にもしません。それが知っているのは、順序の値(0と1)と名前(FISICAとJURIDICA)だけです。あなたはFとJを持続したい場合は、FとJへのあなたの2 enum定数の名前を変更する必要があり、このようなエンティティ内のフィールドに注釈を付けます:

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

またはFを変換するためのカスタム・ユーザー・タイプを使用しますFISICAへ、またはその逆へ。

+1

FISICAの名前をFに、JURIDICAの名前をJに変更しましたか?更新されたコードを表示してください。 –

+0

それは素晴らしいです。期待どおりに働いた。しかし、どうやってFやJの代わりにフルネームを使うことができますか? – Al2x

+1

カスタムユーザータイプを使用してください:http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html_single/#types-custom –