繁体   English   中英

枚举Java类型的正确DB字段数据类型是什么

[英]What's correct DB field data type of an Enum Java Type

我创建了这个枚举:

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

并且我想将值保留在数据库中,我正在使用休眠作为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定义中添加什么?

最好的祝福

由于默认情况下,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()函数将其转换回数据库的整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM