5

I've got a following Hibernate model:

@Entity
@Table(name = "category")
public class Category {

    @Enumerated(EnumType.STRING)
    @Column(name = "type")
    private CategoryType type;

This is the enumeration referenced by hibernate:

public enum CategoryType {
    INCOME, OUTCOME;
}

THe corresponding database field is a varchar which takes 2 possible values: "CategoryIncome" and "CategoryOutcome".

This method actually calls hibernate:

public List<Category> findAllByType(CategoryType type) {
    session = sessionFactory.openSession();
    tx = session.beginTransaction();
    Query query = session.createQuery(
        "FROM Category WHERE type = :type");
    query.setParameter("type", type);
    List list = query.list();
    tx.commit();
    session.close();
    return list;
}

I managed to get my code work (I mean it compiles), but it works badly - it executes following SQL query:

WHERE type = "INCOME"

whereas I would like it to be:

WHERE type = "CategoryIncome"

How can I map enum values into string values for hibernate? I know that EnumType.STRING tells hibernate to cast the enum values to string (could be EnumType.ORDINAL to cast it to integers). But how can I override the default enum-string mapping?

1 Answer 1

7

You will have to use your customized usertype for Hibernate persistance, Hibernate uses name() function of enum to get string representation, not toString().

See this Hibernate @Enumerated mapping

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

Comments

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.