gpt4 book ai didi

java hibernate 覆盖枚举/字符串映射值

转载 作者:搜寻专家 更新时间:2023-10-31 19:56:18 24 4
gpt4 key购买 nike

我有以下 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 以将其转换为整数)。但是如何覆盖默认的枚举字符串映射?

最佳答案

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

看到这个 Hibernate @Enumerated mapping

关于java hibernate 覆盖枚举/字符串映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16045561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com