如何在休眠dropwizard中持久保存ENUM字符串而不是序数值

时间:2015-03-31 15:41:30

标签: hibernate enums dropwizard

我使用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;
    }
}

2 个答案:

答案 0 :(得分:0)

我在使用Dropwizard v0.7.1和M​​ySQL v5.5。

两个列映射字段上的@Enumerated(EnumType.STRING)注释按预期工作(一个字段映射到VARCHAR字段,另一个字段映射到ENUM)

尝试以下方法:

  • 将Dropwizard降级为v0.7.1
  • 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;

    ...
}