`
tigerl
  • 浏览: 97228 次
  • 性别: 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映射枚举类型,hibernate如何映射枚举类型

    JSP 中Hibernate实现映射枚举类型

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

    Hibernate中映射枚举类型

    在Hibernate中如何使用枚举映射,Hibernate中映射枚举类型

    Hibernate笔记 马士兵

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

    精通 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:Java 对象持久化技术详解(第2版).part4

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

    Hibernate实战(第2版 中文高清版)

     5.3.7 映射枚举   5.4 小结   第6章 映射集合和实体关联   6.1 值类型的set、bag、list和map   6.1.1 选择集合接口   6.1.2 映射set   6.1.3 映射标识符bag   6.1.4 映射list   6.1.5 映射map  ...

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

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

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

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

    hibernate 教程

    持久化枚举(Persistent enum)类型 5.2.4. 自定义值类型 5.2.5. 映射到"任意"(any)类型 5.3. SQL中引号包围的标识符 5.4. 映射文件的模块化(Modular mapping files) 6. 集合类(Collections)映射...

    hibernate

    持久化枚举(Persistent enum)类型 5.2.4. 自定义值类型 5.2.5. 映射到"任意"(any)类型 5.3. SQL中引号包围的标识符 5.4. 映射文件的模块化(Modular mapping files) 6. 集合类(Collections)映射...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

Global site tag (gtag.js) - Google Analytics