`
linzx0212
  • 浏览: 7419 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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配置文件方式。

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

<param name="type">12</param>

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

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.csst.linzx.test.domain.Person" table="person">
		<id column="ID" name="id" type="java.lang.Long">
			<generator class="identity" />
		</id>
		<property name="name" type="java.lang.String" not-null="true">
			<column name="name">
				<comment>姓名</comment>
			</column>
		</property>
		<property name="sex">
			<type name="org.hibernate.type.EnumType">
				<param name="enumClass">com.test.common.constants.Gender</param>
                                <param name="type">12</param>
			</type>
		</property>
		<property name="age" type="java.lang.Integer">
			<column name="age" />
		</property>
		<property name="remark" type="java.lang.String">
			<column name="remark" />
		</property>
	</class>
</hibernate-mapping>

 

 

使用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映射枚举类型

    除了`@Enumerated`,还可以使用第三方库如`org.hibernate.type.EnumType`来更精细地控制枚举映射。例如,我们可以指定使用枚举的某个属性进行映射: ```java import org.hibernate.annotations.Type; import org....

    Hibernate中映射枚举类型

    Hibernate提供了一个专门用于枚举类型映射的类`org.hibernate.type.EnumType`。通过这个类,我们可以选择将枚举实例的`name`或者`ordinal`映射到数据库。具体的配置是在Hibernate的映射文件(通常是.hbm.xml文件)中...

    Hibernate注释方法描述数据库映射

    ### Hibernate注释方法描述数据库映射 #### 一、概述 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了 Java 开发者与数据库交互的过程。在 Hibernate 中,可以利用注解来描述实体类与数据库表之间的映射...

    Hibernate3.2EnumTypeMapping-demo.zip

    在Hibernate3.2版本中,对枚举类型的支持得到了显著增强,引入了更优雅的映射方式。本示例代码工程"Hibernate3.2EnumTypeMapping-demo.zip"就是为了演示如何在Hibernate中正确地处理枚举类型,以提高数据模型的清晰...

    JSP 中Hibernate实现映射枚举类型

    JSP 中Hibernate实现映射枚举类型 问题: Java BO类Gender是枚举类型,想在数据库中存成字符串格式,如何编写hbm.xml? public enum Gender{ UNKNOWN(Unknown), MALE(Male), FEMALE(Female); private String ...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    《Hibernate注释与枚举映射详解》 Hibernate作为Java领域中最流行的ORM(对象关系映射)框架之一,极大地简化了数据库操作。本篇将详细探讨`hibernate-annotations-3.4.0.GA`和`hibernate-entitymanager-3.4.0.GA`...

    Hibernate 参考文档

    - **一对多关联**:一对多关系的映射方法。 - **延迟初始化(延迟加载)**:一种性能优化手段,只在真正需要时加载关联数据。 - **集合排序**:对集合中的元素进行排序的映射方式。 - **使用**:一种特殊的集合...

    Hibernate注解API.pdf

    假设有一个简单的实体类 `User`,包含基本属性 `id` 和 `name`,我们可以这样使用注解进行映射: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType....

    hibernate注解大全

    Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者使用面向对象的方式操作数据库。在Hibernate中,注解是声明对象与数据库表之间映射关系的主要方式。以下是对描述中提到的几个关键注解的详细说明...

    hibernate 教程

    对映射(Mapping)缓冲 14.3.2. 策略:只读缓存 14.3.3. 策略:读/写缓存 14.3.4. 策略:不严格的读/写缓存 14.3.5. 策略:事务缓存(transactional) 14.4. 管理Session缓存 14.5. 查询缓存(Query ...

    springboot项目中枚举类型的最佳实践

    当然,也可以使用`@Enumerated(EnumType.STRING)`保存枚举的名称,但请注意这可能会增加数据库存储空间。 此外,还可以创建一个枚举类型转换器,以便在数据库查询时能够根据枚举名称进行匹配: ```java public ...

    HIbernate annotation使用手册

    ### Hibernate Annotation 使用手册详解 #### 一、概述 Hibernate 是一款非常流行的 ORM(Object Relational Mapping)框架,它能够简化 Java 应用程序与数据库之间的交互。为了更好地使用 Hibernate 进行开发,...

    Hibernate注解详解(超全面不解释).pdf

    在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。本文将详细解析Hibernate中的注解使用,帮助理解如何通过注解简化数据库操作。 首先,实体Bean是...

    05_JPA详解_日期_枚举等字段类型的JPA映射.zip

    属性与数据库列的映射使用`@Column`注解。主键的映射可以使用`@Id`,复合主键则使用`@IdClass`或`@EmbeddedId`。 ### 6. 映射关系 JPA提供了多种关系映射方式,如一对一(@OneToOne)、一对多(@OneToMany)、多对...

    Hibernate注解详解

    以上就是Hibernate注解的基本使用方法,通过这些注解,开发者可以灵活地定义实体 Bean 与数据库表之间的映射关系,从而实现对象的持久化。理解并熟练掌握这些注解,能够有效地提高开发效率,减少代码量,并使数据库...

    Hibernate注解详解.pdf

    ### Hibernate注解详解 ...以上是对Hibernate注解的基础介绍及其使用示例,这些注解可以帮助开发者更方便地管理和操作数据库表结构及数据。在实际开发中,合理运用这些注解能够有效提升开发效率和程序质量。

    Hibernate注解大全收藏

    【Hibernate注解详解】 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,使得开发者可以方便地在...在实际应用中,开发者可以根据需求灵活组合和使用这些注解,以实现各种复杂的数据库映射和操作。

    Hibernate注释

    以上就是关于Hibernate注释的基本知识,它们在Java对象和数据库表之间的映射中起着至关重要的作用,简化了开发过程,并提供了更灵活的持久化管理。通过合理使用这些注解,开发者能够有效地控制对象的生命周期,处理...

Global site tag (gtag.js) - Google Analytics