在休眠中将枚举映射为字符串

我有一个分类冬眠模型:

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


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


@Column(name = "type")
private String type;

它有一个类型字符串字段,还有一个代表类别类型的 Java 枚举:

public enum CategoryType {
INCOME, OUTCOME;
}

我想用它来代替字符串类型。SQL 在 varchar 参数中接受两个不同的值: CategoryIncomeCategoryOutcome。我希望 Category 模型类能够接受一个 enum 变量——并在 hibernate 请求时以某种方式将其映射到字符串。

有可能吗?

82923 次浏览

是的,有可能,应该是:

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

对于 PostgreSQL来说,公认的答案是不够的。我附上了适合我的实现:

Https://stackoverflow.com/a/64021041/5279996

我不得不说

@Column(columnDefinition = "VARCHAR(30)")

发送到@dcernahoschi 的解决方案。

@Column(columnDefinition = "VARCHAR(30)")
@Enumerated(EnumType.STRING)
@Column(name = "category_type")
private CategoryType categoryType

除非我得到例外

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "