注解

来自:http://my.oschina.net/xinxingegeya/blog/359968
Hibernate 使用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 类型存储。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值