`
tigerl
  • 浏览: 98693 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate4映射枚举类型

阅读更多
使用hibernate的过程中,会用到枚举类型,比如一个User表,User会有好几种状态例如:正常,无状态,禁用等!

这是枚举类:
package demo.ljl.hibernate4;

public enum StatuEnum {
	ACTIVE, DISABLED, INVALID
}


三种状态这里是,User类如下:

package demo.ljl.hibernate4;

public class User {
	private int id;
	private String name;
	private StatuEnum statu;
	
	
	
	public StatuEnum getStatu() {
		return statu;
	}
	public void setStatu(StatuEnum statu) {
		this.statu = statu;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return BeanToStringUtils.toString(this);
	}
}


使用配置文件映射如下:
<?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="demo.ljl.hibernate4.User" table="t_user">
		<cache usage="read-only" region="user_cache"/>
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<property name="statu">
			<type name="org.hibernate.type.EnumType">
				<param name="enumClass">demo.ljl.hibernate4.StatuEnum</param>
				<param name="type">-6</param>
			</type>
		</property>
	</class>
	
</hibernate-mapping>


在映射statu的时候,使用如上配置,使用type标签指定Hibernate的枚举类型,在param标签中使用enumClass指定你的枚举类,在这里如果不加
<param name="type">-6</param>

这里的type的值-6为java.sql.Types中的常量,即:TINYINT(4个长度的int)
则默认为Integer类型,这样最终映射到数据库是int(11),11个长度的int,这样太浪费空间了,而bit是不能指定的,之所以依然存在是为了兼容以前的版本!所以最小的就是tinyint了。

而实际上4个长度的int所能表示的范围已经足够大了-9999到9999,所以可以指定type为-6,那么最终数据库生成的表就是tinyint(4);

当往数据库中插入数据的时候,保存的为枚举常量的索引值,比如上面定义了三个常量,当u.setStatu(StatuEnum.INVALID)的时候,保存到数据库中的值为2,因为INVALID是第二位!

如果想要保存到数据库中的值为枚举常量的字符串值比如INVALID,则指定type为12,也即varchar,但是这样hibernate默认取长度为255,显然更浪费,虽然你可以使用length来限制长度,但是这个长度起码得是枚举常量中字符串最长的那个,显然使用tinyint是最合适不过了!
分享到:
评论

相关推荐

    hibernate映射枚举类型

    Hibernate,作为Java中广泛使用的对象关系映射(ORM)框架,提供了一种优雅的方式来映射枚举类型到数据库。本文将深入探讨Hibernate如何映射枚举类型,并给出实际应用示例。 ### Hibernate枚举映射方式 #### 1. `@...

    JSP 中Hibernate实现映射枚举类型

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

    Hibernate中映射枚举类型

    #### 映射枚举类型的基本方式 Hibernate提供了一个专门用于枚举类型映射的类`org.hibernate.type.EnumType`。通过这个类,我们可以选择将枚举实例的`name`或者`ordinal`映射到数据库。具体的配置是在Hibernate的...

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

    其次,对于数据库操作,枚举类型可以用于ORM框架如Hibernate的实体属性。在持久化枚举到数据库时,通常将枚举的`ordinal()`值或自定义的code映射到数据库字段,以避免枚举值更改导致的数据不一致。例如,我们可以在...

    java根据实体类生成Hibernate映射文件

    需要注意的是,这只是一个基本的实现,实际的生产环境中可能需要处理更复杂的情况,如自定义生成策略、关联关系映射、枚举类型等。此外,对于大型项目,通常会使用代码生成工具(如MyBatis的MyBatis Generator或...

    Hibernate继承映射的第一种策略:每棵类继承树对应一张表

    Hibernate会自动处理类型标识字段,确保正确地映射到相应的子类。 ### 性能和设计考虑 单一表继承策略具有以下优缺点: **优点**: - 数据库表更少,减少表连接操作,提高查询性能。 - 易于理解和实现。 **缺点*...

    Hibernate_关联关系映射配置

    本教程将详细讲解Hibernate中的关联关系映射配置,帮助你理解和掌握如何在Hibernate中设置不同类型的关联。 一、一对一(One-to-One)关联 在现实世界中,两个实体之间可能存在一对一的关系,例如一个人只有一个...

    hibernate关系映射

    `CascadeType`枚举提供了多种级联类型,如SAVE_UPDATE、DELETE等。 **八、查询优化** Hibernate支持HQL(Hibernate Query Language)和 Criteria API 进行查询,它们提供更面向对象的查询方式。同时,使用缓存机制...

    Hibernate3.2EnumTypeMapping-demo.zip

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

    Hibernate映射

    **Hibernate映射详解** 在Java世界中,关系型数据库与对象模型之间的转换一直是开发中的一个挑战。Hibernate,作为一款强大的对象关系映射(ORM)框架,有效地解决了这个问题。本篇文章将深入探讨Hibernate映射的...

    hibernate使用中与各种数据库字段类型对应类型训练

    9. **枚举类型**:在数据库中可以使用CHAR或INT存储,Hibernate通过`@Enumerated`注解支持枚举类型映射。 在实际应用中,我们还需要关注以下几点: - **级联操作**:如CascadeType.PERSIST、CascadeType.MERGE等,...

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

    Java中的枚举类型可以方便地与数据库中的字符串或整型字段进行映射。JPA提供了`@Enumerated`注解来处理枚举字段: - `@Enumerated(EnumType.STRING)`:将枚举值转换为字符串存储。 - `@Enumerated(EnumType.ORDINAL...

    Hibernate笔记 马士兵

    十三、 映射枚举类型 19 第12课 使用hibernate工具类将对象模型生成关系模型 19 第13课 ID主键生成策略 20 一、 Xml方式 20 元素(主键生成策略) 20 二、 annotateon方式 21 1、AUTO默认 21 2、IDENTITY 22 3、...

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

    `@Temporal` 注解接受 `DATE`, `TIME`, `TIMESTAMP` 这三个枚举值,分别映射到 `java.sql.Date`, `java.sql.Time`, `java.sql.Timestamp` 类型。 #### 七、大对象的持久化 对于大对象(如文本、图像等),可以使用...

    Hibernate_3.2属性文档介绍_中文

    枚举类型在许多场景下非常有用,Hibernate支持将Java枚举类型映射到数据库的整型或字符串类型,从而简化了枚举值的存储和读取。 ### 配置方式 Hibernate提供多种配置方式,包括XML映射文件、注解和API编程方式。...

    hibernate基础jar包

    9. 类型转换:Hibernate提供了一些自定义类型,比如日期时间类型、枚举类型等,使得Java对象可以更好地映射到数据库字段。 10. 其他依赖:为了功能完整,基础包可能还包含其他依赖,如JAXB用于XML序列化,或者DOM4J...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     11.2.2 用UserType映射枚举类型  11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 映射继承关系  12.1 继承关系树的每个具体类...

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

    - Hibernate 3.4.0.GA版本支持枚举类型映射,使得枚举可以更自然地与数据库交互。有两种主要的映射方式: - `@Enumerated(EnumType.STRING)`: 将枚举值转化为字符串存储,便于理解和查询。 - `@Enumerated(Enum...

Global site tag (gtag.js) - Google Analytics