Подтвердить что ты не робот

Hibernate Exception: неизвестное имя для класса enum

Im получение неизвестного имени для класса enum при попытке получить записи из БД. Использование jsf 2.0, jpa.

Возможные значения в моей БД: "F" или "J"

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: F   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: F .... ......

4b9b3361

Ответ 1

Hibernate не знает и не заботится о поле id внутри вашего перечисления. Все, что он знает, это порядковое значение (0 и 1) и имя (FISICA и JURIDICA). Если вы хотите сохранить F и J, вам придется переименовать ваши две константы перечисления в F и J и аннотировать поле в сущности следующим образом:

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

или используйте пользовательский тип, чтобы преобразовать F в FISICA или наоборот.