duc*_*cin 5 java mapping enums hibernate
我有一个以下的Hibernate模型:
@Entity
@Table(name = "category")
public class Category {
@Enumerated(EnumType.STRING)
@Column(name = "type")
private CategoryType type;
Run Code Online (Sandbox Code Playgroud)
这是hibernate引用的枚举:
public enum CategoryType {
INCOME, OUTCOME;
}
Run Code Online (Sandbox Code Playgroud)
相应的数据库字段是一个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;
}
Run Code Online (Sandbox Code Playgroud)
我设法让我的代码工作(我的意思是它编译),但它工作得很糟糕 - 它执行以下SQL查询:
WHERE type = "INCOME"
Run Code Online (Sandbox Code Playgroud)
而我希望它是:
WHERE type = "CategoryIncome"
Run Code Online (Sandbox Code Playgroud)
如何将枚举值映射到hibernate的字符串值?我知道EnumType.STRING告诉hibernate将枚举值强制转换为字符串(可以是EnumType.ORDINAL将其强制转换为整数).但是我如何覆盖默认的枚举字符串映射?
您将不得不使用自定义的usertype来进行Hibernate持久性,Hibernate使用name()函数enum来获取字符串表示,而不是toString().