java – Hibernate异常:枚举类的未知名称值

前端之家收集整理的这篇文章主要介绍了java – Hibernate异常:枚举类的未知名称值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当尝试从DB中检索记录时,我将获取枚举类的未知名称值.使用jsf 2.0,jpa.

我的DB中的可能值是’F’或’J’

枚举:

  1. public enum TipoPessoa {
  2.  
  3. FISICA ("F","Física"),JURIDICA ("J","Jurídica");
  4.  
  5. private final String id;
  6. private final String descricao;
  7.  
  8. private TipoPessoa(String id,String descricao){
  9. this.id = id;
  10. this.descricao = descricao;
  11. }
  12.  
  13. public String getId() {
  14. return id;
  15. }
  16.  
  17. public String getDescricao(){
  18. return descricao;
  19. }
  20. }

实体 :

  1. @Column(nullable=false,length=1)
  2. private TipoPessoa tipoPessoa;
  3.  
  4. public TipoPessoa getTipoPessoa() {
  5. return tipoPessoa;
  6. }
  7.  
  8. public void setTipoPessoa(TipoPessoa tipoPessoa) {
  9. this.tipoPessoa = tipoPessoa;
  10. }

当我尝试从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,并对实体中的字段进行注释:
  1. @Column(nullable=false,length=1)
  2. @Enumerated(EnumType.STRING)
  3. private TipoPessoa tipoPessoa;

或使用自定义用户类型将F转换为FISICA,反之亦然.

猜你在找的Java相关文章