Al2*_*l2x 18 java enums hibernate jpa
尝试从DB中检索记录时,我收到枚举类的未知名称值.使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
实体:
@Column(nullable=false, length=1)
private TipoPessoa tipoPessoa;
public TipoPessoa getTipoPessoa() {
return tipoPessoa;
}
public void setTipoPessoa(TipoPessoa tipoPessoa) {
this.tipoPessoa = tipoPessoa;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从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 .... ......
JB *_*zet 21
Hibernate不知道并关心你的枚举中的id字段.所有它知道的是序数值(0和1)和名称(FISICA和JURIDICA).如果要保留F和J,则必须将两个枚举常量重命名为F和J,并在实体中注释该字段,如下所示:
@Column(nullable=false, length=1)
@Enumerated(EnumType.STRING)
private TipoPessoa tipoPessoa;
Run Code Online (Sandbox Code Playgroud)
或使用自定义用户类型将F转换为FISICA,反之亦然.
归档时间: |
|
查看次数: |
32608 次 |
最近记录: |