博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Enumerated && EnumType映射枚举字段
阅读量:6154 次
发布时间:2019-06-21

本文共 2158 字,大约阅读时间需要 7 分钟。

hot3.png

使用Enumerated && EnumType映射枚举字段

Enumerated 和 EnumType 是 jpa 的两个注解。这两个注解用来映射枚举字段。

有一个枚举类,如下,

package com.lyx;/** * Created by liyanxin on 2014/12/24. */public enum Gender {    MAIL("男性"), FMAIL("女性");    private String value;    private Gender(String value) {        this.value = value;    }    @Override    public String toString() {        return this.value;    }}

有一个User 类 如下,

package com.lyx;import java.io.Serializable;import javax.persistence.*;@Entity@Table(name = "tb_user")public class User implements Serializable {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;    private String name;    private int age;    @ManyToOne    @JoinColumn(name = "role_id", unique = false, nullable = false)    private Role role;    @Enumerated(EnumType.STRING)    @Column(name = "user_gender")    private Gender gender;    .......................}

这块就是对枚举的映射配置,

@Enumerated(EnumType.STRING)@Column(name = "user_gender")private Gender gender;

且看生成后的数据库schema,如下,

CREATE TABLE `tb_user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `age` int(11) NOT NULL,  `name` varchar(255) DEFAULT NULL,  `role_id` int(11) NOT NULL,  `user_gender` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `FK_1sfby1b8i8xi58er483adw21f` (`role_id`),  CONSTRAINT `FK_1sfby1b8i8xi58er483adw21f` FOREIGN KEY (`role_id`) REFERENCES `tb_role` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=206 DEFAULT CHARSET=latin1
 `user_gender` varchar(255) DEFAULT NULL,

类型是varchar(255),此时枚举字段对应的持久化类型为字符串,是枚举的name

===========================================

如果映射为如下,

@Enumerated(EnumType.ORDINAL)@Column(name = "user_gender")private Gender gender;

生成的数据库schema 为

`user_gender` int(11) DEFAULT NULL

插入几条数据看看什么效果,

id  age  user_gender  name  role_id  --  ---  -----------  ----  -------  1   23   1            lyx   1        2   23   0            lyx   1        3   23   1            lyx   1        4   23   1            lyx   1        5   23   1            lyx   1

枚举类型 被持久化为 0 和 1 的int字段。(因为枚举类只有两个枚举字段,所以只有两个值,0和1,如果有三个枚举字段,那么就有三个值,0,1,2,以此类推。)

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

===========================================

转载于:https://my.oschina.net/xinxingegeya/blog/359968

你可能感兴趣的文章
python模块之hashlib: md5和sha算法
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
Spring常用注解
查看>>
我的友情链接
查看>>
PCS子层有什么用?
查看>>
查看端口,关闭端口
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Mindjet MindManager 2019使用教程:
查看>>
详解 CSS 绝对定位
查看>>
AOP
查看>>
NGUI Label Color Code
查看>>
vue组件开发练习--焦点图切换
查看>>