Hibernate 如何在休眠向导中保留枚举字符串而不是序号值

Hibernate 如何在休眠向导中保留枚举字符串而不是序号值,hibernate,enums,dropwizard,Hibernate,Enums,Dropwizard,我将dropwizard 0.8与hibernate一起用于数据库持久性。当持久化枚举列时,它将以序号值而不是字符串值保存到数据库中。我将@Enumerated(EnumType.STRING)放在列模型的顶部 这让我觉得dropwizard 0.8根本不支持EnumType.STRING 有什么帮助吗 public enum State { NOTSTARTED, RUNNING, COMPLETE, ABORTING, ABORTED, FAI

我将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;
    }
}

我使用的是Dropwizard v0.7.1和MySQL v5.5

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

请尝试以下操作:

  • 将Dropwizard降级至v0.7.1
  • 将您的
    状态设置为
    状态的
    a类子类

我最终解决了这个问题,将@Enumerated(EnumType.STRING)从字段级别移动到属性级别,它就工作了。 我认为这是因为我使用Status类的方式,它嵌入到另一个类中,并用属性访问类型进行注释。因此,在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;

    ...
}

谢谢,我还没有尝试将dropwizard降级到v0.7.x,因为我的项目已经有几个地方绑定到了0.8.0,这是由于它本身的依赖性升级。我已经解决了这个问题,正如我在下面发布的那样。