[英]java hibernate override enum/string mapping values
我有一個以下的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以將其強制轉換為整數)。 但是我如何覆蓋默認的枚舉字符串映射?
您必須使用自定義的usertype來進行Hibernate持久性,Hibernate使用enum
name()
函數來獲取字符串表示,而不是toString()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.