国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Hibernate如何映射enum(JDK5.0中的枚舉類)方法一

Hibernate如何映射enumJDK5.0中的枚舉類)方法一

先看一張表:

 

Create table test(

 

Test_id integer not null auto_increment, 

gender Enum(MALE, FEMALE) 

)

 

 

hibernatepojo中可以這樣描述:

 

public final class TestVO {

   private Integer id;

 

public staticenum Gender {

        MALE, FEMALE;

    }

   private Gender gender;

 

 

   public Integer getId() {

       return id;

    }

 

   public void setId(Integer id) {

       this.id = id;

   }   

    

 

   public Gender getGender() {

       return gender;

    }

 

   public void setGender(Gender gender) {

       this.gender = gender;

    }

 

}

 

而后要自己寫一個適合enum的在hibernate中的類型,雖然hibernate已經(jīng)有了

 

Org.hibernate.type.EnumType.但是這個類是用于annotation的(在后面會討論怎么用annotation技術(shù)映射enum.

 

 

創(chuàng)建一個自己的EnumUserType:

 

import java.io.Serializable;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Types;

 

import org.hibernate.HibernateException;

import org.hibernate.usertype.UserType;

import org.apache.log4j.*;

 

public class EnumUserType<E extendsEnum<E>> implements UserType {

   private Logger log = Logger.getLogger(EnumUserType.class);

 

   private Class<E> clazz = null;

 

   private static final int[] SQL_TYPES = { Types.VARCHAR };

 

   protected EnumUserType(Class<E> c) {

       this.clazz = c;

    }

 

   public int[] sqlTypes() {

       return SQL_TYPES;

    }

 

   public Class<E> returnedClass() {

       return clazz;

    }

 

   public Object assemble(Serializable cached, Object owner)

           throws HibernateException {

       // TODO Auto-generated method stub

       return cached;

    }

 

   public Object deepCopy(Object value) throws HibernateException {

       // TODO Auto-generated method stub

       return value;

    }

 

   public Serializable disassemble(Object value) throws HibernateException{

       // TODO Auto-generated method stub

       return (Serializable) value;

    }

 

   public boolean equals(Object x, Object y) throws HibernateException {

       // TODO Auto-generated method stub

       if (x == y)

           return true;

       if (null == x || null == y)

           return true;

       return x.equals(y);

    }

 

   public int hashCode(Object x) throws HibernateException {

       // TODO Auto-generated method stub

       return x.hashCode();

    }

 

   public boolean isMutable() {

       // TODO Auto-generated method stub

       return false;

    }

 

   public Object nullSafeGet(ResultSet resultSet, String[] names, Objectowner)

           throws HibernateException, SQLException {

       // TODO Auto-generated method stub

 

       E result = null;

       if (!resultSet.wasNull()) {

           String name = resultSet.getString(names[0]).toUpperCase();

           result = Enum.valueOf(clazz, name);

       }

       return result;

    }

 

   public void nullSafeSet(PreparedStatement prepareStatement, Objectvalue,

           int index) throws HibernateException, SQLException {

       // TODO Auto-generated method stub

       if (null == value) {

           prepareStatement.setNull(index, Types.VARCHAR);

       } else {

           prepareStatement.setString(index, ((Enum) value).name());

       }

 

    }

 

   public Object replace(Object original, Object target, Object owner)

           throws HibernateException {

       // TODO Auto-generated method stub

       return original;

    }

}

 

 

 

在這里筆者嚴(yán)重提醒大家:

 

如果你的枚舉類里定義的是大寫字母,比如:

 

public static enum Gender {

 

       MALE, FEMALE;

 

    }

 

那么在String name= resultSet.getString(names[0]).toUpperCase();

 

這里一定要加上toUpperCase()方法。筆者這里介紹的方法,只適用于enmu里的類型為String類型,若要映射其他類新,可以自己修改。

 

 

最后創(chuàng)建一個子類,繼承于這個類:

 

public class GenderEnumType extendsEnumUserType<Gender> {

 

   public GenderEnumType() {

       super(Gender.class);

       // TODO Auto-generated constructor stub

    }

}

 

這樣,GenderEnumType就是你在hibernate中定義的可以映射enum的類。 

 

當(dāng)然要寫入**.hbm.xml了: 

<?xml version="1.0"?>

 

<!DOCTYPE hibernate-mapping PUBLIC 

   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping package=""> 

   <class name="TestVO" table="test">

       <id name="id" column="test_id">

           <generator class="native" />

       </id> 

       <property name="gender" not-null="true"column="gender"

           type="GenderEnumType" />

   </class>

</hibernate-mapping>

 

(注釋:包的命名可以自己去改,這里不在解釋)。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Enum字段hibernate持久化時,使用Enum的自定義字段
JAVA上DES加密算法的實現(xiàn)用例
Java枚舉類
spring hibernate的事務(wù)處理(使用hibernate原有的sessionFactory)
Spring中的HibernateTemplate
解決:Weblogic容器、SSH框架下Hibernate映射Oracle XMLType方法與Jar包沖突
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服