5

次の Hibernate モデルがあります。

@Entity
@Table(name = "category")
public class Category {

    @Enumerated(EnumType.STRING)
    @Column(name = "type")
    private CategoryType type;

これは、hibernate によって参照される列挙です。

public enum CategoryType {
    INCOME, OUTCOME;
}

対応するデータベース フィールドは、「CategoryIncome」と「CategoryOutcome」の 2 つの値を取る varchar です。

このメソッドは実際に 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"

enum 値を hibernate の文字列値にマップするにはどうすればよいですか? 列挙値を文字列にキャストするように hibernate に指示することを知っていEnumType.STRINGます (整数にキャストするには EnumType.ORDINAL にすることができます)。しかし、デフォルトの enum-string マッピングをオーバーライドするにはどうすればよいでしょうか?

4

1 に答える 1