Hibernate4.2 枚举映射问题

把以前的项目用Hibernate4.2 更新后出现了一系列问题。笔者是hibernate-release-4.2.2.Final版本

折腾时间最久的便是关于枚举映射问题。

在做了个Gender的枚举类之后,采用xml方式配置hbm文件:

        <property name="gender" not-null="true" length="5">
          <type name="org.hibernate.type.EnumType">
          <!-- 12为java.sql.Types.VARCHAR常量值,即保存枚举的字面值到数据库。
                如果不指定type参数,保存枚举的索引值(从0开始)到数据库-->
                <param name="type">12</param>  
                <param name="useNamed">true</param>
        		<param name="enumClass">cn.itcast.global.Gender</param>
        	</type>
        </property>
Hibernate生成的映射到数据库的代码如下:

Hibernate: 
    create table Employee (
        username varchar(20) not null,
        password varchar(20) not null,
        gender varchar(5) not null,
        primary key (username)
    )
单元测试,保存一条数据到数据库(其中gender值为Gender.MALE, 枚举的Ordinal值为0),显示结果为gender=0;

网上找不到该版本的源代码,而之前版本的代码看过之后的确配置没问题的。无奈最终查看反编译代码,仔细比对后发现 EnumType类多了个静态常量:  public static final java.lang.String NAMED = "useNamed";

在线查找之前版本(4.1.2final),该类的静态常量如下:

org.hibernate.type.EnumType
public static final String CATALOG "catalog"
public static final String COLUMN "column"
public static final String ENUM "enumClass"
public static final String SCHEMA "schema"
public static final String TABLE "table"
public static final String TYPE "type"

于是笔者在hbm文件里多加了条语句:

          <type name="org.hibernate.type.EnumType">
          <!-- 12为java.sql.Types.VARCHAR常量值,即保存枚举的字面值到数据库。
                如果不指定type参数,保存枚举的索引值(从0开始)到数据库-->
                <param name="type">12</param>  
                <!-- 指定是否gender值是否用枚举的Named还是ordinal,默认为false -->
                <param name="useNamed">true</param>
        		<param name="enumClass">cn.itcast.global.Gender</param>
        	</type>
        </property>

运行结果,gender=MALE;

各位找到了该版本源文件可以再看看。


你可能感兴趣的:(枚举,Hibernate,映射,4.2)