作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前有一个 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/
我是一名优秀的程序员,十分优秀!