3

我目前有一个 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);
4

1 回答 1

3

是的,如果 status_id 的值集与枚举的序数匹配,只需使用以下内容:

@Column(name = "STATUS_ID")
@Enumerated(EnumType.ORDINAL )

Hibernate 不会自动生成正确的表结构(FK、TASK_STATUS 表)。

如果数值与序数不匹配,则必须创建自定义类型。这里给出了一个示例,但您当然会使用整数类型而不是 varchar。

于 2012-08-30T09:19:19.553 回答