使用JPA插入枚举类型字段

网友投稿 938 2022-09-30

使用JPA插入枚举类型字段

使用JPA插入枚举类型字段

目录JPA插入枚举类型字段1. 插入枚举名称的值,即字符串2. 插入枚举的序号,即ordinal3.插入枚举中的自定义值JPA枚举类型处理

JPA插入枚举类型字段

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

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

例如,我们有个枚举类:

public enum Gender {

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

GIRL("2" , "girl" , "Girlhttp://");

private int value;

private String s1;

private String s2;

//....省略

}

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

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

public class Staff {

@Enumerated(EnumType.STRING)

private Gender gender;

//...省略

}

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

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

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

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

public class Staff {

@Enumerated(EnumType.ORDINAL)

private Gender gender;

//...省略

}

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

例如:

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

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

public class GenderConverter implements AttributeConverter{

/**

* 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))VtJHXZ{

return s;

}

}

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

}

}

实例类:

public class Staff {

/**

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

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

*/

@Convert(converter = GenderConverter.class)

private Gender gender;

//...省略

}

JPA枚举类型处理

/**

* 枚举类型

*

*/

public enum Sex {

MALE,

FEMALE

}

/**

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

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

*/

@Enumerated(EnumType.STRING)

public Sex getSex() {

return sex;

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL-索引
下一篇:腾讯实时音视频TRTC(腾讯实时音视频收费)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~