将enum映射到hibernate中的字符串

duc*_*cin 82 java enums hibernate

我有一个Category Hibernate模型:

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

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private long id;

    @Column(name = "type")
    private String type;
Run Code Online (Sandbox Code Playgroud)

它有一个类型字符串字段.此外,我有一个Java枚举,代表一种类型:

public enum CategoryType {
    INCOME, OUTCOME;
}
Run Code Online (Sandbox Code Playgroud)

我想用而不是字符串类型.SQL在varchar参数中接受两个不同的值:CategoryIncome或者CategoryOutcome.我希望Category模型类接受一个枚举变量 - 并在hibernate请求它时以某种方式将其映射到字符串.

可能吗?

dce*_*chi 163

是的,是可能的.它应该是:

@Enumerated(EnumType.STRING)
@Column(name = "category_type")
private CategoryType categoryType;
Run Code Online (Sandbox Code Playgroud)

  • 你甚至可以走得更远,现在当JPA 2.1发布时,使用`@Converter(autoApply = true)公共类CategoryTypeConverter实现javax.persistence.AttributeConverter <CategoryType,String>` (14认同)
  • 对于任何可能遇到同样问题的人来说:我必须把这个注释放到我的getter方法而不是字段中,如下所示:`@Enumerated(EnumType.STRING)public CategoryType getCategoryType(){return this.categoryType; }`. (6认同)

COR*_*ian 5

接受的答案对于PostgreSQL来说是不够的。我附上对我有用的实现:

/sf/answers/4481472901/