好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用JPA插入枚举类型字段

JPA插入枚举类型字段

JPA插入枚举类型字段,有三种方式:

插入枚举字面值 插入枚举序号 插入枚举中自定义的值

例如,我们有个枚举类:

?

1

2

3

4

5

6

7

8

9

public enum Gender {

    BOY( "1" , "boy" , "Boy" );

    GIRL( "2" , "girl" , "Girl" );

 

    private int value;

    private String s1;

    private String s2;

    //....省略

}

1. 插入枚举名称的值,即字符串

将BOY或GIRL存入表中,实体类字段如下:

?

1

2

3

4

5

public class Staff {

    @Enumerated (EnumType.STRING)

    private Gender gender;

    //...省略

}

2. 插入枚举的序号,即ordinal

ordinal的意思就是你在类中定义枚举的顺序,从0开始。这种方式并不常用,不清楚同学修改了枚举类容易导致业务异常。

而且JPA默认的方式(不加@Enumerated注解)就是这种。

例如将BOY存入表中,这种方式将存入0。将GIRL存入表中,这种方式将存入1;

?

1

2

3

4

5

public class Staff {

    @Enumerated (EnumType.ORDINAL)

    private Gender gender;

    //...省略

}

3.插入枚举中的自定义值

例如:

?

1

2

3

4

5

6

7

8

9

public enum Gender {

    BOY( "1" , "boy" , "Boy" );

    Girl( "2" , "girl" , "Girl" );

 

    private int value;

    private String s1;

    private String s2;

    //....省略

}

如果想将BOY的数字1或者 [boy] 或者[Boy]存入表中,JPA默认是不支持的,需要自定义一个类实现特定接口: implements AttributeConverter<X,Y>。

以代码为例,详看注释,假如我想将BOY的1存入表中:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

public class GenderConverter implements AttributeConverter<Gender, Integer>{

    /**

      * convertToDatabaseColumn方法是转换数据到表中

      * 这里是将Gender 枚举的value存入表中

      */

     @Override

     public Integer convertToDatabaseColumn(Gender attribute) {

         if (attribute == null ){

             throw new RuntimeException( "Unknown Gender text : " + attribute);

         }

         return attribute.getValue();

     }

 

    /**

      * convertToEntityAttribute方法是转换表中的值转换回数据

      * 这里是将表中的枚举的value值转换成gender枚举

      */

     @Override

     public Gender convertToEntityAttribute(Integer dbData) {

         for (Gender s : Gender.values()){

             if (s.getValue() == (dbData)){

                 return s;

             }

         }

         throw new RuntimeException( "Unknown Gender text : " + dbData);

     }

}

实例类:

?

1

2

3

4

5

6

7

8

9

10

public class Staff {

    

    /**

    * 利用 @Convert 指向自定义转换类GenderConverter

    * 此时JPA会根据自定义转换规则对Gender枚举类进行存取

    */

    @Convert (converter = GenderConverter. class )

    private Gender gender;

    //...省略

}

JPA枚举类型处理

?

1

2

3

4

5

6

7

8

/**

  * 枚举类型

  *

  */

public enum Sex {

    MALE,

    FEMALE

}

?

1

2

3

4

5

6

7

8

/**

* @Enumerated(EnumType.STRING) : 存放字符串数据

* @Enumerated(EnumType.ORDINAL) : 存放索引值

*/

@Enumerated (EnumType.STRING)

public Sex getSex() {

    return sex;

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/u013189824/article/details/106804623

查看更多关于使用JPA插入枚举类型字段的详细内容...

  阅读:26次