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
....
......
Ответы
Ответ 1
Hibernate не знает и не заботится о поле id внутри вашего перечисления. Все, что он знает, это порядковое значение (0 и 1) и имя (FISICA и JURIDICA). Если вы хотите сохранить F и J, вам придется переименовать ваши две константы перечисления в F и J и аннотировать поле в сущности следующим образом:
@Column(nullable=false, length=1)
@Enumerated(EnumType.STRING)
private TipoPessoa tipoPessoa;
или используйте пользовательский тип, чтобы преобразовать F в FISICA или наоборот.