JPA中@Enumerated注解

@Enumerated 注解在 JPA 中用于处理枚举类型字段,与 MySQL 的 ENUM 类型对应。默认情况下,枚举按 ORDINAL 方式映射为整数,如 Gender.MALE 映射为 0,Gender.FEMALE 映射为 1。通过设置为 STRING,枚举值将映射为字符串,如 MALE 和 FEMALE。这种方式更直观,但会占用更多存储空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Enumerated用于标注枚举字段,对应mysql的enum类型

  1. 源码支持两种类型

    package javax.persistence;
    
    public enum EnumType {
        ORDINAL,//按照枚举的下标,使用Enum类型实例在Enum中声明的顺序,通过这个序号来将Enum类型字段映射成int类型来存储;
        STRING;//按照枚举的名字,使用Enum类型实例中的name属性来完成映射,将Enum类型映射成字符串的方式
        private EnumType() {
        }
    }
    
  2. 默认情况

    当不使用任何注解的时候,默认情况下是使用ordinal属性,序号是从0开始的

  3. ORDINAL例子

    3.1 定义一个Enum类

    public enum Gender {
        MALE,
        FEMALE
    }
    

    3.2 定义一个Entity

    @Data//自动生成get和set方法
    @Entity
    public class Person{ 
        @Id
        @GeneratedValue
        private Long id;
     
        @Column(nullable = false)
        private String name;
     
        @Column
        private Gender gender;
     
        public Person(String name, Gender gender){
            this.name = name;
            this.gender = gender;
        }
    }
    

    3.3 数据库中表结构在这里插入图片描述
    Enum类型字段Gender被映射成int(11)类型

    3.4 插入数据

    @Test
    public void insert_data_into_person(){
        personService.save(new Person("Tom", Gender.MALE));
        personService.save(new Person("Joy", Gender.FEMALE));
    }
    
    

    3.5 查看数据库中的插入结果
    在这里插入图片描述
    ​ 表中Gender.MALE对应的序号是0,Gender.FEMALE对应的序号是1

  4. STRING的例子

    4.1 定义一个Enum类

    public enum Gender {
        MALE,
        FEMALE
    }
    

    4.2 一个Entity

    @Data//自动生成get和set方法
    @Entity
    public class Person{ 
        @Id
        @GeneratedValue
        private Long id;
     
        @Column(nullable = false)
        private String name;
     
        @Column
        @Enumerated(EnumType.STRING)
        private Gender gender;
     
        public Person(String name, Gender gender){
            this.name = name;
            this.gender = gender;
        }
    }
    

    4.3 数据库中表结构
    在这里插入图片描述
    Enum类型字段Gender被映射成VARCHAR(255)类型

    4.4 插入数据

    @Test
    public void insert_data_into_person(){
        personService.save(new Person("Tom", Gender.MALE));
        personService.save(new Person("Joy", Gender.FEMALE));
    }
    

    4.5 查看数据库中的插入结果
    在这里插入图片描述
    表中Gender.MALE对应的就是MALE,Gender.FEMALE对应的就是FEMALE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值