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,它有 2 个可能的值:“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"

如何将枚举值映射到休眠的字符串值?我知道这EnumType.STRING告诉休眠将枚举值转换为字符串(可能是 EnumType.ORDINAL 将其转换为整数)。但是如何覆盖默认的枚举字符串映射?

4

1 回答 1

6

您必须使用自定义的用户类型来实现 Hibernate 持久性,Hibernate 使用name()函数enum来获取字符串表示,而不是toString().

请参阅此 Hibernate @Enumerated 映射

于 2013-04-16T19:54:31.940 回答