Hibernate对Enum的映射的基本使用方法

阅读更多

 

枚举

 

/**
 * 性别枚举
 */
public enum Gender {

    MALE(0), FEMALE(1), OTHER(2);

    private Gender(int i) {
        this.i = i;
    }

    private int i;

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

}

 

 

1、注解方式。

使用@Enumerated,该枚举中只包含EnumType的属性,可以理解为映射后存储到数据库的数据类型,或者称为映射方式;默认是EnumType.ORDINAL,另有EnumType.STRING。EnumType.ORDINAL映射的是枚举的顺序,EnumType.STRING映射的是枚举的名称。

 

@Entity
@Table(name = "person")
public class Person {

    private Long id;
    private String name;
    private Gender sex;
    private Integer age;
    private String remark;
    private String unUsed;

    @Id
    @Column(name = "id", unique = true, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(nullable = false)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(nullable = false)
    @Enumerated
    public Gender getSex() {
        return this.sex;
    }

    public void setSex(Gender sex) {
        this.sex = sex;
    }

    @Column(nullable = false)
    public Integer getAge() {
        return this.age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getRemark() {
        return this.remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    /** 非数据库表的映射字段,故使用@Transient忽略 */
    @Transient
    public String getUnUsed() {
        return this.unUsed;
    }

    public void setUnUsed(String unUsed) {
        this.unUsed = unUsed;
    }

}

 

2、xml配置文件方式。

意思同注解方式,只是此处使用

12

 配置出上面EnumType的效果,type的值是数字,该数字是java.sql.Types对数据库类型的常量定义值,默认是4,即integer型,12即varchar型。

 

 




	
		
			
		
		
			
				姓名
			
		
		
			
				com.test.common.constants.Gender
                                12
			
		
		
			
		
		
			
		
	

 

 

使用int的存储结果(以下Sex中的值不是枚举中定义的值,而是其排列顺序):

 

 id   name     sex   age    remark
15    girl 1 10     girl r
16    boy 0 11     boy r
17   what 2 12     what r

使用String的存储结果:

 

   id    name     sex    age    remark
18      girl  FEMALE 10      girl r
19     boy  MALE 11      boy r
20     what  OTHER 12     what r

 

        以上的方式是简易式的,如果需要映射指定的值——枚举括号中的值,需要使用hibernate的自定义类型UserType来定义枚举,很麻烦,砖家称不到万不得已不推荐使用。

 

 

你可能感兴趣的:(hibernate,enum)