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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With