尝试从数据库检索记录时,我得到了枚举类的“未知名称”值。使用JSF 2.0,JPA。
我的数据库中可能的值为“ 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; }
当我尝试从数据库读取记录时出现错误
您能帮我解决这个问题吗?谢谢
堆栈跟踪:
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 .... ......
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 .... ......
Hibernate不了解并关心枚举中的id字段。它所知道的只是序数值(0和1)和名称(FISICA和JURIDICA)。如果要保留F和J,则必须将两个枚举常量重命名为F和J,并在实体中注释字段,如下所示:
@Column(nullable=false, length=1) @Enumerated(EnumType.STRING) private TipoPessoa tipoPessoa;
或使用自定义用户类型将F转换为FISICA,反之亦然。