19

DB からレコードを取得しようとすると、enum クラスの不明な名前の値が表示されます。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) .doFilter(FiltroEncode.java:26) 根本原因

javax.ejb.EJBTransactionRolledbackException: enum クラス br.com.aaa.xxx.entidade.TipoPessoa の不明な名前値: F .... ......

4

1 に答える 1

24

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

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

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

于 2013-07-05T17:06:50.673 に答える