我目前有一个Hibernate映射,其工作原理如下:
Table 'TASK':
id int, name varchar, status varchar
枚举
public enum TaskStatus {
INVALID, INITIAL, IN_PROGRESS, PAUSED, DONE;
}
类型
@Entity
public class Task {
@Column(name = "STATUS")
@Enumerated(EnumType.STRING)
private TaskStatus status;
public TaskStatus getStatus() {
return status;
}
public void setStatus(TaskStatus status) {
this.status = status;
}
}
我想更改此设置以在一个表中保存所有可能的状态,例如:
Table 'TASK_STATUS':
id int, status varchar
Table 'TASK':
id int, name varchar, status_id int foreign key
是否可以使用Hibernate Annotations定义枚举类型的映射,以及将其映射到任务类型的方法。我仍然希望Java实现看起来像上面的那个(具有TaskStatus属性而不是int属性)所以我可以轻松使用:
myTask.setStatus(TaskStatus.DONE);
答案 0 :(得分:3)
是的,如果status_id的值集与枚举的序数匹配,只需使用以下内容:
@Column(name = "STATUS_ID")
@Enumerated(EnumType.ORDINAL )
Hibernate不会自动生成正确的表结构(FK,TASK_STATUS表)。
如果数值与序数不匹配,则必须创建自定义类型。一个例子是here,但你当然会使用整数类型而不是varchar。