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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |