java – 如何使用enum与jpa作为持久化实体的数据成员?
作者:互联网
请使用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;
}
}
标签:java,enums,openjpa 来源: https://codeday.me/bug/20190715/1472916.html