什么是Enum Java Type的正确DB字段数据类型

时间:2014-06-19 14:22:22

标签: java hibernate enums

我创建了这个枚举:

    public enum CicloEnum {
        CL("Ciclo Largo"),
        CC("Ciclo Corto"),
        CI("Ciclo Intermedio");

        private String descripcion;

        private CicloEnum(String descripcion) {
            this.setDescripcion(descripcion);
        }

        public String getDescripcion() {
            return descripcion;
        }

        public void setDescripcion(String descripcion) {
            this.descripcion = descripcion;
        }
       }

我希望在DB中保留该值,我将hibernate用作ORM引擎。

    @Entity
    @Table(name="bloquecruzamiento")
    public class BloqueCruzamiento {
         //...
         private CicloEnum ciclo;
         //...
        /**
         * @return the ciclo
         */
            public CicloEnum getCiclo() {
            return ciclo;
        }

        /**
         * @param ciclo the ciclo to set
         */
        public void setCiclo(CicloEnum ciclo) {
            this.ciclo = ciclo;
        }

问题是,我希望数据库中的字段是数字的,但如果它是创建为Varchar则没什么大不了的。 如何实现数据库中的字段创建为int(2)的目标?我需要将哪些内容添加到Enum定义中?

最好的问候

1 个答案:

答案 0 :(得分:0)

因为默认情况下,Java中ENUMS的值是序数,所以可以使用类似数组的方式设置它们。唯一的变化是将此枚举转换回整数值。我对你的枚举类所做的更改是添加一个函数来执行此操作:

public enum CicloEnum {
    CL("Ciclo Largo"), CC("Ciclo Corto"), CI("Ciclo Intermedio");

    private String descripcion;

    private CicloEnum(String descripcion) {
        this.setDescripcion(descripcion);
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }


    public int toIntForDatabase() {
        switch (this) {
        case CL:
            return 0;
        case CC:
            return 1;
        case CI:
            return 2;
        }
        return -1;
    }
}

然后,您可以通过调用MyEnum.values()[x]来设置枚举,其中MyEnum是枚举的名称,x是它将表示的整数的值。例如,CL为0,CC为1,CI为2.我编写的示例测试是:

public static void main(String[] args) throws Exception {

    int i = 1;
    CicloEnum ce = CicloEnum.values()[i];
    System.out.println(ce.getDescripcion());
    System.out.println(ce.toIntForDatabase());

}

这基于一个整数来设置一个枚举" i" (来自数据库的值),然后使用toIntForDatabase()函数将其转换回数据库的整数。