簡體   English   中英

java hibernate覆蓋枚舉/字符串映射值

[英]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()

請參閱此Hibernate @Enumerated映射

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM