gpt4 book ai didi

java - 如何使用 Hibernate 将枚举映射到单独的表?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:56:07 25 4
gpt4 key购买 nike

我目前有一个 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 注释定义枚举类型的映射以及将其映射到任务类型的方法。我仍然希望 Java 实现看起来像上面的实现(具有 TaskStatus 属性而不是 int 属性),这样我就可以轻松地使用:

myTask.setStatus(TaskStatus.DONE);

最佳答案

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

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

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

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

关于java - 如何使用 Hibernate 将枚举映射到单独的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12193184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com