web-dev-qa-db-ja.com

Hibernate Exception:enum classの不明な名前の値

DBからレコードを取得しようとすると、列挙型クラスの不明な名前の値を取得しています。 JSF 2.0、JPAを使用します。

私のDBで可能な値は「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:enumクラスの名前の値が不明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 .... ......

18
Al2x

Hibernateは、enum内のidフィールドを知りません。それが知っているのは、序数値(0と1)と名前(FISICAとJURIDICA)だけです。 FとJを永続化するには、2つの列挙型定数の名前をFとJに変更し、エンティティのフィールドに次のように注釈を付ける必要があります。

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

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

20
JB Nizet