次の 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 マッピングをオーバーライドするにはどうすればよいでしょうか?