枚举
/** * 性别枚举 */ 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来定义枚举,很麻烦,砖家称不到万不得已不推荐使用。
相关推荐
除了`@Enumerated`,还可以使用第三方库如`org.hibernate.type.EnumType`来更精细地控制枚举映射。例如,我们可以指定使用枚举的某个属性进行映射: ```java import org.hibernate.annotations.Type; import org....
Hibernate提供了一个专门用于枚举类型映射的类`org.hibernate.type.EnumType`。通过这个类,我们可以选择将枚举实例的`name`或者`ordinal`映射到数据库。具体的配置是在Hibernate的映射文件(通常是.hbm.xml文件)中...
### Hibernate注释方法描述数据库映射 #### 一、概述 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了 Java 开发者与数据库交互的过程。在 Hibernate 中,可以利用注解来描述实体类与数据库表之间的映射...
在Hibernate3.2版本中,对枚举类型的支持得到了显著增强,引入了更优雅的映射方式。本示例代码工程"Hibernate3.2EnumTypeMapping-demo.zip"就是为了演示如何在Hibernate中正确地处理枚举类型,以提高数据模型的清晰...
JSP 中Hibernate实现映射枚举类型 问题: Java BO类Gender是枚举类型,想在数据库中存成字符串格式,如何编写hbm.xml? public enum Gender{ UNKNOWN(Unknown), MALE(Male), FEMALE(Female); private String ...
《Hibernate注释与枚举映射详解》 Hibernate作为Java领域中最流行的ORM(对象关系映射)框架之一,极大地简化了数据库操作。本篇将详细探讨`hibernate-annotations-3.4.0.GA`和`hibernate-entitymanager-3.4.0.GA`...
- **一对多关联**:一对多关系的映射方法。 - **延迟初始化(延迟加载)**:一种性能优化手段,只在真正需要时加载关联数据。 - **集合排序**:对集合中的元素进行排序的映射方式。 - **使用**:一种特殊的集合...
假设有一个简单的实体类 `User`,包含基本属性 `id` 和 `name`,我们可以这样使用注解进行映射: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType....
Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者使用面向对象的方式操作数据库。在Hibernate中,注解是声明对象与数据库表之间映射关系的主要方式。以下是对描述中提到的几个关键注解的详细说明...
对映射(Mapping)缓冲 14.3.2. 策略:只读缓存 14.3.3. 策略:读/写缓存 14.3.4. 策略:不严格的读/写缓存 14.3.5. 策略:事务缓存(transactional) 14.4. 管理Session缓存 14.5. 查询缓存(Query ...
当然,也可以使用`@Enumerated(EnumType.STRING)`保存枚举的名称,但请注意这可能会增加数据库存储空间。 此外,还可以创建一个枚举类型转换器,以便在数据库查询时能够根据枚举名称进行匹配: ```java public ...
### Hibernate Annotation 使用手册详解 #### 一、概述 Hibernate 是一款非常流行的 ORM(Object Relational Mapping)框架,它能够简化 Java 应用程序与数据库之间的交互。为了更好地使用 Hibernate 进行开发,...
在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。本文将详细解析Hibernate中的注解使用,帮助理解如何通过注解简化数据库操作。 首先,实体Bean是...
属性与数据库列的映射使用`@Column`注解。主键的映射可以使用`@Id`,复合主键则使用`@IdClass`或`@EmbeddedId`。 ### 6. 映射关系 JPA提供了多种关系映射方式,如一对一(@OneToOne)、一对多(@OneToMany)、多对...
以上就是Hibernate注解的基本使用方法,通过这些注解,开发者可以灵活地定义实体 Bean 与数据库表之间的映射关系,从而实现对象的持久化。理解并熟练掌握这些注解,能够有效地提高开发效率,减少代码量,并使数据库...
### Hibernate注解详解 ...以上是对Hibernate注解的基础介绍及其使用示例,这些注解可以帮助开发者更方便地管理和操作数据库表结构及数据。在实际开发中,合理运用这些注解能够有效提升开发效率和程序质量。
【Hibernate注解详解】 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,使得开发者可以方便地在...在实际应用中,开发者可以根据需求灵活组合和使用这些注解,以实现各种复杂的数据库映射和操作。
以上就是关于Hibernate注释的基本知识,它们在Java对象和数据库表之间的映射中起着至关重要的作用,简化了开发过程,并提供了更灵活的持久化管理。通过合理使用这些注解,开发者能够有效地控制对象的生命周期,处理...