您的位置:首页 > 其它

Hibernate将Enum枚举类型映射为Int类型(补充VARCHAR类型配置)

2012-04-17 22:59 465 查看
最近要用Hibernate做一个枚举类型的映射,在MySQL数据库中,hibernate的map文件中如果不配置枚举类型属性的type,那么hibernate会默认的将Enum类型映射为TinyBlob类型,这样就很尴尬了,似乎要多耗费很多的资源,去网上找了一下,有很多种解决办法

如果用的是annotation那么用@Enumerated(EnumType.STRING)直接可以映射为String类型
如果采用XML配置就没这么简单了,网上最多的方法是利用Hibernate提供的UserType但这样并不是最好的解决办法,还有一种更好的办法

package com.igalia.enumerates;
public enum Status {
BUSY,    AVAILABLE;
}

package com.igalia.entities;
class MyClass {
private Status status;
//getter and setter
}


映射为int类型配置如下:

<class name="MyClass">
<id name="id">
<generator class="native"/>
</id>
<property name="status">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">com.igalia.enumerates.Status</param>
</type>
</property>
</class>


原文地址:http://blog.csdn.net/G_beginner/article/details/6579582

映射为VARCHAR类型配置如下(其中type=12,12是java.sql.Type中定义的Type.VARCHAR对应的整形值, 默认配置是4,也即Type.INTEGER类型):

<class name="MyClass">
<id name="id">
<generator class="native"/>
</id>
<property name="status">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">com.igalia.enumerates.Status</param>
<param name="type">12</param>
</type>
</property>
</class>


注:type=12,默认保存到数据库中的是enum类型的具体类型名称,

也就是,如果new MyClass().setStatus(Status.BUSY); 那么实际保存的是字符串值"BUSY",而Status.AVAILABLE,则保存的字符串是:"AVAILABLE"。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: