当尝试从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:枚举类的未知名称值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,反之亦然.