JPA Mapping枚举到不同的String

时间:2014-11-13 12:17:29

标签: string jpa mapping

在我的数据库中有固定的字符串代码(例如“200”),我想将它映射到枚举常量,我希望这些常量有更多可理解的名称(如“STATUS_CODE_OK”)。所以我想将枚举常量映射到数据库中的不同String。

我认为不可能使用@Enumerated(EnumType.STRING),因为它使用Enum.name()完全按照声明的方式返回枚举常量,它是最终的(所以我不能覆盖它)。

有没有办法映射它?

1 个答案:

答案 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);
    }

}

如您所见,您在代码中使用枚举操作并将字符串值存储在数据库中。