19

I'm getting Unknown name value for enum class when trying to retrieve records from DB. Using JSF 2.0, JPA.

The possible values in my DB are 'F' or '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;
    }
}

Entity:

@Column(nullable=false, length=1)
private TipoPessoa tipoPessoa;

public TipoPessoa getTipoPessoa() {
    return tipoPessoa;
}

public void setTipoPessoa(TipoPessoa tipoPessoa) {
    this.tipoPessoa = tipoPessoa;
}

When I try to read the records from DB I got the error

Would you please help me on this issue? thanks

Stack trace:

javax.servlet.ServletException: Unknown name value for enum class br.com.aaa.xxx.entidade.TipoPessoa: F javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) br.com.aaa.filtro.FiltroEncode.doFilter(FiltroEncode.java:26) root cause

javax.ejb.EJBTransactionRolledbackException: Unknown name value for enum class br.com.aaa.xxx.entidade.TipoPessoa: F .... ......

2
  • You are doing the mapping wrong. How should Hibernate know how to map the enum type? See e.g. this SO question. Commented Jul 5, 2013 at 17:03
  • @surfealokesea stacktrace updated in the question. Commented Jul 5, 2013 at 17:11

1 Answer 1

24

Hibernate doesn't know and care about the id field inside your enum. All it knows about is the ordinal value (0 and 1) and the name (FISICA and JURIDICA). If you want to persist F and J, you'll have to rename your two enum constants to F and J, and annotate the field in the entity like this:

@Column(nullable=false, length=1)
@Enumerated(EnumType.STRING)
private TipoPessoa tipoPessoa;

or use a custom user type to transform F to FISICA or vice-versa.

Sign up to request clarification or add additional context in comments.

6 Comments

Thats great. Worked as expected. But How can I do to let the full names instead F or J ?
RESOLVED* @JB Nizet thank you so much for helping. Im newly in Java and spent some hours trying to fix that. Now its fixed by you :)
@JB Nizet when I remove enum string in java. but it is in DB. when I retrieve the records from the DB. It gives a null pointer exception. How to overcome this problem?
@KumaresanPerumal so you have a value in the database that is supposed to be mapped to an enum, but doesn't have any of the valid enum values? Don't do that. Change the values in the DB to a valid enum value, or leave the enum as it was.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.