Python 官方文档:入门教程 => 点击学习
目录JPA插入枚举类型字段1. 插入枚举名称的值,即字符串2. 插入枚举的序号,即ordinal3.插入枚举中的自定义值JPA枚举类型处理JPA插入枚举类型字段 JPA插入枚举类型字
JPA插入枚举类型字段,有三种方式:
例如,我们有个枚举类:
public enum Gender {
BOY("1" , "boy" , "Boy");
GIRL("2" , "girl" , "Girl");
private int value;
private String s1;
private String s2;
//....省略
}
将BOY或GIRL存入表中,实体类字段如下:
public class Staff {
@Enumerated(EnumType.STRING)
private Gender gender;
//...省略
}
ordinal的意思就是你在类中定义枚举的顺序,从0开始。这种方式并不常用,不清楚同学修改了枚举类容易导致业务异常。
而且JPA默认的方式(不加@Enumerated注解)就是这种。
例如将BOY存入表中,这种方式将存入0。将GIRL存入表中,这种方式将存入1;
public class Staff {
@Enumerated(EnumType.ORDINAL)
private Gender gender;
//...省略
}
例如:
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>{
@Override
public Integer convertToDatabaseColumn(Gender attribute) {
if(attribute == null){
throw new RuntimeException("Unknown Gender text : " + attribute);
}
return attribute.getValue();
}
@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(converter = GenderConverter.class)
private Gender gender;
//...省略
}
public enum Sex {
MALE,
FEMALE
}
@Enumerated(EnumType.STRING)
public Sex getSex() {
return sex;
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: 使用JPA插入枚举类型字段
本文链接: https://lsjlt.com/news/151054.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0