加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何使用enum与jpa作为持久化实体的数据成员?

发布时间:2020-12-15 04:51:46 所属栏目:Java 来源:网络整理
导读:请使用jum作为持久化实体的数据成员的最佳实践和“如何”使用enum. 什么是最佳做法? 我想从枚举中坚持“C”,“O”. (代码).如果这不是正确的方法,请建议. Enum defination是 – public enum Status{CLOSED ("C")OPEN ("O")private final int value;private
请使用jum作为持久化实体的数据成员的最佳实践和“如何”使用enum.
什么是最佳做法?
我想从枚举中坚持“C”,“O”. (代码).如果这不是正确的方法,请建议.

Enum defination是 –

public enum Status{
CLOSED ("C")
OPEN ("O")
private final int value;
private Status(final int pValue){
this.value = pValue;
}

public int value(){
 return this.value;
}

解决方法

预期解决方案
枚举定义:

public enum Status {
    CLOSED(1),NEW(2),RUNNING(3),OPEN(4),ADDED(5),SUCEESS(-1),DONE(0);
        private int code;
        private Status(int code) {
        this.code = code;
    }
        public int getCode() {
        return code;
    }
        public void setCode(int code) {
        this.code = code;
    }
        public static Status valueOf(int i){
        for (Status s : values()){
            if (s.code == i){
                return s;
            }
        }
        throw new IllegalArgumentException("No matching constant for " + i);
    }

}

实体定义:

@Entity
@NamedQuery(name="Process.findAll",query="select p from Process p ")
public class Process {

    @Id
    private long id;
    private String name;

    @Transient
    private transient Status status; //actual enum; not stored in db
        @Column(name="STATUS")  
    private int statusCode; // enum code gets stored in db

    @PrePersist
    void populateDBFields(){
        statusCode = status.getCode();
    }

    @PostLoad
    void populateTransientFields(){
        status = Status.valueOf(statusCode);
    }
    public long getId() {
        return id;
    }
        public void setId(long id) {
        this.id = id;
    }
        public String getName() {
        return name;
    }
        public void setName(String name) {
        this.name = name;
    }
        public Status getStatus() {
        return status;
    }
        public void setStatus(Status status) {
        this.status = status;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读