Java Hibernate如何覆盖枚举/字符串映射值

5

我有一个以下的Hibernate模型:

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

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

这是Hibernate引用的枚举类型:
public enum CategoryType {
    INCOME, OUTCOME;
}

相应的数据库字段是一个varchar类型,它有两个可能的值:"CategoryIncome"和"CategoryOutcome"。

这种方法实际上调用了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;
}

我设法让我的代码能够工作(指编译),但它的表现很糟糕 - 它执行以下SQL查询:

WHERE type = "INCOME"

而我希望它是这样的:

WHERE type = "CategoryIncome"

我如何将枚举值映射为字符串值以供Hibernate使用? 我知道EnumType.STRING告诉Hibernate将枚举值转换为字符串(也可以是EnumType.ORDINAL将其转换为整数)。但是,我该如何覆盖默认的枚举-字符串映射呢?

1个回答

7

在Hibernate持久化中,您需要使用自定义的用户类型,Hibernate使用enumname()函数来获取字符串表示形式,而不是toString()

请参见此链接:Hibernate @Enumerated mapping


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接