我使用dropwizard 0.8和hibernate进行数据库持久化。当持久化枚举列时,它会以其序数值而不是字符串值保存到数据库中。我将@Enumerated(EnumType.STRING)
置于列模型的顶部。
这让我感觉像dropwizard 0.8根本不尊重EnumType.STRING。
对此有何帮助?
public enum State {
NOTSTARTED,
RUNNING,
COMPLETE,
ABORTING,
ABORTED,
FAILED;
}
public class Status implements Serializable{
@Column(name="state")
@Enumerated(EnumType.STRING)
private State state;
@Column(name="error")
private String error;
Status() {
}
Status(State state, String error) {
this.state = state;
this.error = error;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
答案 0 :(得分:0)
我在使用Dropwizard v0.7.1和MySQL v5.5。
两个列映射字段上的@Enumerated(EnumType.STRING)
注释按预期工作(一个字段映射到VARCHAR字段,另一个字段映射到ENUM)
尝试以下方法:
State
课程设为Status
答案 1 :(得分:0)
我最终通过将@Enumerated(EnumType.STRING)从字段级别移动到属性级别来解决问题,并且它可以正常工作。 我认为这是因为我使用Status类的方式,它嵌入在另一个类中,并使用Property访问类型进行注释。所以在status类中,我也应该将注释放在属性级别上。
@Entity
@Table(name = "job")
@JsonSerialize(include= JsonSerialize.Inclusion.NON_NULL)
public class Job implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Embedded
@Access(AccessType.PROPERTY)
private Status status;
...
}