这篇文章主要介绍了使用JPA插入枚举类型字段,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
JPA插入枚举类型字段
JPA插入枚举类型字段,有三种方式:
- 插入枚举字面值
- 插入枚举序号
- 插入枚举中自定义的值
例如,我们有个枚举类:
public enum Gender {
BOY("1" , "boy" , "Boy");
GIRL("2" , "girl" , "Girl");
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<X,Y>。
以代码为例,详看注释,假如我想将BOY的1存入表中:
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);
}
}实例类:
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;
}以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。
编程基础网
本文标题为:使用JPA插入枚举类型字段
基础教程推荐
猜你喜欢
- 一文带你搞懂Java中方法重写与方法重载的区别 2023-07-14
- Spring Cloud Config分布式配置中心使用介绍详解 2023-05-07
- Java List的get方法 2023-10-08
- RocketMQ Push 消费模型示例详解 2023-05-24
- java知识点7——面向过程和面向对象、面向对象的内存分析、构造方法 2023-09-01
- 关于Java双大括号{{}}的具体使用 2023-03-15
- Java Web开发中过滤器和监听器使用详解 2023-06-30
- MyBatis-Plus自定义通用的方法实现 2023-07-15
- Java实现插入排序算法可视化的示例代码 2023-04-23
- Java多线程学习笔记之三内存屏障与Java内存模型 2023-09-01
