在我的数据库中有固定的字符串代码(例如“200”),我想将它映射到枚举常量,我希望这些常量有更多可理解的名称(如“STATUS_CODE_OK”)。所以我想将枚举常量映射到数据库中的不同String。
我认为不可能使用@Enumerated(EnumType.STRING)
,因为它使用Enum.name()
完全按照声明的方式返回枚举常量,它是最终的(所以我不能覆盖它)。
有没有办法映射它?
答案 0 :(得分:1)
享受最佳实践:
您的实体
@Entity
public class MyEntity {
@Column
protected String status;
public Status getStatus() {
return Status.fromId(status);
}
public void setStatus(Status status) {
this.status = status == null ? null : status.getId();
}
}
状态代码枚举
public enum Status {
OK("200"), NOT_OK("500");
protected String id;
Status(String id) {
this.id = id;
}
public static Status fromId(String id){
if (id == null) return null;
else if (OK.id.equals(id)) return OK;
else if (NOT_OK.id.equals(id)) return NOT_OK;
else throw new IllegalArgumentException("Can't parse Status from id : " + id);
}
}
如您所见,您在代码中使用枚举操作并将字符串值存储在数据库中。