我是靠谱客的博主 粗心哑铃,这篇文章主要介绍JPA注解@Enumerated映射枚举字段,现在分享给大家,希望可以做个参考。

在javax.persistence包中有这么两个注解@Enumerated,@EnumType

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*/ @Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface Enumerated { /** (Optional) The type used in mapping an enum type. */ EnumType value() default ORDINAL; } public enum EnumType { /** 持久枚举类型字段为整数,元素一般从0开始索引. */ ORDINAL, /** 持久枚举类型为字符串. */ STRING }复制代码

当我需要持久化一个枚举类字段的时候,就可以用@Enumerated来标注枚举类型。来举个栗子:

数据库中有一张employee表

对应的Employee实体

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Entity @Table(name = "employee", schema = "public") @Data @Builder @AllArgsConstructor @NoArgsConstructor public class Employee { @Id @GeneratedValue @Column(name = "id") private Long id; @Column(name = "name") private String name; @Column(name = "sex") @Enumerated(EnumType.ORDINAL)//性别字段持久化为0,1 private Sex sex; @Column(name = "type") @Enumerated(EnumType.STRING)//枚举字符串 private Type type; }复制代码

Sex枚举类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
public enum Sex { MAIL("男"), FMAIL("女"); private String value; private Sex(String value) { this.value = value; } }复制代码

Type枚举类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
public enum Type { PROGRAMMER("开发"), PM("项目经理"), TESTERS("测试"), UI("妹子"), ; private String type; private Type(String type) { } }复制代码

那现在我们来看一下插入几条数据看下是什么效果。

复制代码
1
2
3
4
5
6
7
8
9
EmployeeRepostory employeeRepostory = context.getBean(EmployeeRepostory.class); Employee fireYao = Employee.builder().name("fireYao").sex(Sex.MAIL).type(Type.PROGRAMMER).build(); Employee gakki = Employee.builder().name("gakki").sex(Sex.FMAIL).type(Type.UI).build(); Employee whoever = Employee.builder().name("whoever").sex(Sex.FMAIL).type(Type.PM).build(); employeeRepostory.save(Arrays.asList(fireYao,gakki,whoever));复制代码

插入数据后,数据库中:

可以看到,sex字段被持久化为0,1这样的int字段,因为在sex字段上标注了@Enumerated(EnumType.ORDINAL),那这样持久化到数据库时,就会根据枚举类中的字段,依次从0开始标记,Sex中MAIL("男")就为0,FMAIL("女")就为1依次增加。

在type字段上标注了@Enumerated(EnumType.STRING),就直接根据枚举类的字段字符串来自动持久化到数据库。

如果枚举字段上不加注解,那么枚举字段就会被默认映射为 int 类型存储。

那现在我们来看查询一下的结果。

复制代码
1
List<Employee> all = employeeRepostory.findAll();复制代码

可以看到,查询出来的结果中sex字段又自动还原成了Sex枚举字段。


原文链接:JPA注解@Enumerated映射枚举字段 | 火尧

最后

以上就是粗心哑铃最近收集整理的关于JPA注解@Enumerated映射枚举字段的全部内容,更多相关JPA注解@Enumerated映射枚举字段内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(98)

评论列表共有 0 条评论

立即
投稿
返回
顶部