hibernate将enum映射成int或varchar类型
1.如果用的是annotation那么用@Enumerated(EnumType.STRING)直接可以映射为String类型2.如果采用XML配置就没这么简单了,网上最多的方法是利用Hibernate提供的UserType但这样并不是最好的解决办法,还有一种更好的办法package com.igalia.enumerates;
public enum Status { BUSY, AVAILABLE; }package com.igalia.entities;
class MyClass { private Status status; //getter and setter}<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>映射为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"。