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;
  }
}

これを変更して、考えられるすべてのステータスを次のような 1 つのテーブルに保存したいと考えています。

Table 'TASK_STATUS':
  id int, status varchar

Table 'TASK':
  id int, name varchar, status_id int foreign key

Hibernate Annotations を使用して列挙型のマッピングを定義し、それを Task Type にマップする方法は可能ですか。私はまだ Java 実装を上記のようにしたい (int プロパティの代わりに TaskStatus プロパティを持つ) ので、快適に使用できます。

myTask.setStatus(TaskStatus.DONE);
4

1 に答える 1

3

はい、status_id の値セットが enum の序数と一致する場合は、単に次を使用します。

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

正しいテーブル構造 (FK、TASK_STATUS テーブル) は、Hibernate によって自動的に生成されません。

数値が序数と一致しない場合は、カスタム タイプを作成する必要があります。一例をここに示しますが、もちろん varchar の代わりに整数型を使用します。

于 2012-08-30T09:19:19.553 に答える