国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > JSP > 正文

JSP 中Hibernate實(shí)現(xiàn)映射枚舉類型

2024-09-05 00:22:56
字體:
供稿:網(wǎng)友

JSP 中Hibernate實(shí)現(xiàn)映射枚舉類型

問題:

Java BO類Gender是枚舉類型,想在數(shù)據(jù)庫中存成字符串格式,如何編寫hbm.xml?

public enum Gender{   UNKNOWN("Unknown"),   MALE("Male"),   FEMALE("Female");     private String key;  private Gender(final String key) {   this.key = key;  }  public getGender(String key) {   for (Gender gender : Gender.values()) {    if (key.euqals(gender.getKey()))     return gender;         }   throw new NoSuchElementException(key);  } } 

使用UserType:

public class GenderUserType implements UserType {     private static int[] typeList = { Types.VARCHAR};    /*   * Return the SQL type codes for the columns mapped by this type.   * The codes are defined on <tt>java.sql.Types</tt>. */  /**設(shè)置和Gender類的sex屬性對(duì)應(yīng)的字段的SQL類型 */   public int[] sqlTypes() {    return typeList;  }   /*The class returned by <tt>nullSafeGet()</tt>.*/  /** 設(shè)置GenderUserType所映射的Java類:Gender類 */  public Class returnedClass() {    return Gender.class;   }    /** 指明Gender類是不可變類 */   public boolean isMutable() {    return false;  }   /*  * Return a deep copy of the persistent state, stopping at entities and at  * collections. It is not necessary to copy immutable objects, or null  * values, in which case it is safe to simply return the argument.  */  /** 返回Gender對(duì)象的快照,由于Gender類是不可變類, 因此直接將參數(shù)代表的Gender對(duì)象返回 */   public Object deepCopy(Object value) {    return (Gender)value;   }    /** 比較一個(gè)Gender對(duì)象是否和它的快照相同 */  public boolean equals(Object x, Object y) {   //由于內(nèi)存中只可能有兩個(gè)靜態(tài)常量Gender實(shí)例,    //因此可以直接按內(nèi)存地址比較    return (x == y);   }   public int hashCode(Object x){     return x.hashCode();   }    /*  * Retrieve an instance of the mapped class from a JDBC resultset. Implementors  * should handle possibility of null values.  */  /** 從JDBC ResultSet中讀取key,然后返回相應(yīng)的Gender實(shí)例 */  public Object nullSafeGet(ResultSet rs, String[] names, Object owner)                throws HibernateException, SQLException{     //從ResultSet中讀取key    String sex = (String) Hibernate.STRING.nullSafeGet(rs, names[0]);     if (sex == null) { return null; }     //按照性別查找匹配的Gender實(shí)例     try {      return Gender.getGender(sex);     }catch (java.util.NoSuchElementException e) {      throw new HibernateException("Bad Gender value: " + sex, e);     }   }   /*  * Write an instance of the mapped class to a prepared statement. Implementors  * should handle possibility of null values.  * A multi-column type should be written to parameters starting from <tt>index</tt>.  */  /** 把Gender對(duì)象的key屬性添加到JDBC PreparedStatement中 */  public void nullSafeSet(PreparedStatement st, Object value, int index)                  throws HibernateException, SQLException{    String sex = null;    if (value != null)      sex = ((Gender)value).getKey();    Hibernate.String.nullSafeSet(st, sex, index);   }    /*  * Reconstruct an object from the cacheable representation. At the very least this  * method should perform a deep copy if the type is mutable. (optional operation)  */  public Object assemble(Serializable cached, Object owner){    return cached;  }     /*    * Transform the object into its cacheable representation. At the very least this    * method should perform a deep copy if the type is mutable. That may not be enough    * for some implementations, however; for example, associations must be cached as    * identifier values. (optional operation)   */   public Serializable disassemble(Object value) {      return (Serializable)value;    }    /*  * During merge, replace the existing (target) value in the entity we are merging to  * with a new (original) value from the detached entity we are merging. For immutable  * objects, or null values, it is safe to simply return the first parameter. For  * mutable objects, it is safe to return a copy of the first parameter. For objects  * with component values, it might make sense to recursively replace component values.  */  public Object replace(Object original, Object target, Object owner){     return original;   }  } 

然后再hbm.xml中定義映射關(guān)系:

<hibernate-mapping package="" default-lazy="true" default-cascade="save-update,merge,persist">   <typedef name="Gender" class="com.alpha.hibernate.GenderUserType">     <property name="gender" type="Gender">         <column name="GENDER" not-null="true">         </column>     </property> 

延伸:

為每個(gè)枚舉類型定義一個(gè)UserType是比較麻煩的,可以定義一個(gè)抽象類。

例如擴(kuò)展下例即可適用于所有保存為index的枚舉類型

public abstract class OrdinalEnumUserType<E extends Enum<E>> implements UserType {     protected Class<E> clazz;      protected OrdinalEnumUserType(Class<E> clazz) {     this.clazz = clazz;   }      private static final int[] SQL_TYPES = {Types.NUMERIC};    public int[] sqlTypes() {      return SQL_TYPES;    }      public Class<?> returnedClass() {      return clazz;    }      public E nullSafeGet(ResultSet resultSet, String[] names, Object owner)                 throws HibernateException, SQLException {          //Hibernate.STRING.nullSafeGet(rs, names[0])     int index = resultSet.getInt(names[0]);     E result = null;      if (!resultSet.wasNull()) {        result = clazz.getEnumConstants()[index];      }      return result;    }      public void nullSafeSet(PreparedStatement preparedStatement,      Object value,int index) throws HibernateException, SQLException {      if (null == value) {        preparedStatement.setNull(index, Types.NUMERIC);      } else {        //Hibernate.String.nullSafeSet(st, sex, index);       preparedStatement.setInt(index, ((E)value).ordinal());      }    }      public Object deepCopy(Object value) throws HibernateException{      return value;    }      public boolean isMutable() {      return false;    }      public Object assemble(Serializable cached, Object owner)  throws HibernateException {      return cached;   }     public Serializable disassemble(Object value) throws HibernateException {      return (Serializable)value;    }      public Object replace(Object original, Object target, Object owner) throws HibernateException {      return original;    }    public int hashCode(Object x) throws HibernateException {      return x.hashCode();    }    public boolean equals(Object x, Object y) throws HibernateException {      if (x == y)        return true;      if (null == x || null == y)        return false;      return x.equals(y);    }  } 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JSP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
五月天天在线| 福利在线视频导航| av中文在线| 久草.com| heisi视频网在线观看| 在线观看免费观看在线91| 四虎一区二区三区| 国产黄视频网站| 日本中文字幕在线视频| 狂野欧美性猛交xxxx乱大交| 国产精品视频流白浆免费视频| 18av在线视频| 国产精品偷乱一区二区三区| 国产理论在线观看| 秋霞av在线| 国产小视频在线播放| 国产精品伦一区二区三区视频 | 亚洲第一成人在线视频| 国产美女自拍视频| 永久免费av网站| 非洲黑人最猛性xxxx交| 国产视频中文字幕在线观看| 日本不卡影院| 国产小视频在线观看| 伊人免费在线| 青青草在线免费观看| 精品176二区| 黄色毛片在线| 国产一卡2卡3卡免费网站| 精品免费视频一卡2卡三卡4卡不卡| 国产美女福利在线观看| 午夜在线小视频| 国产视频青青| 四虎网站在线观看| 国产中文字幕在线播放| 九九免费视频| 在线免费黄色毛片| 综合蜜桃精品| 国产精品外围在线观看| aaa大片在线观看| 亚洲欧美精品日韩欧美| 亚洲免费国产| 一色桃子av在线| 最新国产在线精品91尤物| 最新黄网在线观看| 中文字幕在线视频免费观看| 亚洲伊人网在线观看| √天堂8资源中文在线| 国产二区视频在线观看| 中文字幕国产在线| 九色在线网站| 国产精品偷乱一区二区三区| 热99re久久精品这里都是免费| 天天av综合网| 日本aⅴ写真网站免费| 精品日韩av| 国产黄视频在线观看| 麻豆av在线| 国产一二在线观看| 国产黄色片中文字幕| 国产男女无套在线播放| 国产调教视频在线观看| 国产区视频在线观看| 激情五月色综合亚洲小说| 四虎精品成人a在线观看| 中文字幕免费在线视频| 亚洲成人福利| 国产精品入口免费麻豆| 在线视频中文字幕第一页| 中文视频在线| 国产高清av在线| 最近中文字幕mv免费高清在线| 国产一级二级在线| 五月天天在线| 国产色婷婷在线| 一本久中文高清| 在线国产91| 人xxxx性xxxxx欧美| 久久av少妇| 九九热视频在线观看| 国产精品久久久精品a级小说| 亚洲尤物在线视频| 欧美日韩视频精品一区二区| 超碰免费在线观看| 国产在线麻豆精品| 在线免费国产| 国产在线视频精品视频免费看| 国产无套粉嫩白浆在线2022年| 中文资源在线网| 成人精品福利| www.狠狠色.com| 国产黄色在线看| 国产麻豆精品一区二区三区v视界| 青青草中文字幕| 国产精品国产三级国产试看| 超碰在线观看免费| 亚洲国产精品区| 91精选福利| 国产导航在线| 国产精品剧情一区二区在线观看| 九九色在线观看| 久久精品无码一区二区日韩av| 亚洲网站视频在线观看| 国产精品186在线观看在线播放| 国产麻豆一区二区三区精品| 九色在线网站| 国产乱在线观看视频| 麻豆视频在线观看免费网站| 中文字幕av在线播放| 国产youjizz在线| 国产成在线观看免费视频| 在线中文免费视频| av网站大全在线| 亚洲欧美中文字幕在线观看 | 狠狠综合久久久综合| 人人澡人人爽| 黄网站在线观看高清免费| 高清在线观看av| 国产小视频在线播放| 国产精品蜜臀| 在线色视频网| 国产在线视频自拍| 国产一区电影| 精品一区二区三区免费站| 伊人久久青青草| 九九视频精品在线| 国产区在线视频| 永久免费av片在线观看全网站| av资源网站在线观看| 黄色片视频在线观看| 国产黄色免费看| 日本成a人片在线观看| 最近中文字幕mv2018在线高清 | 国产精品白浆流出视频| 国产日韩欧美精品一区二区三区| 国产私人尤物无码不卡| 国产高清视频在线观看| 在线天堂中文| 黄色激情网址| 精品偷拍激情视频在线观看| 麻豆电影传媒二区| 国产精品扒开做爽爽爽的视频| 性网站在线看| 国产精品不卡一区二区三区在线观看| 青草av在线| 97国产在线| 国产亚洲精品久久久久久移动网络 | 国产精品你懂的在线观看| 日本h视频在线观看| 国产精品入口麻豆免费观看| 不卡av免费观看| 精精国产xxxx视频在线中文版| 尤物在线视频| 国产在线黄色片| 美女国产在线| 欧美性猛交xxxx免费看久久| 999精品网| 国产成人综合亚洲欧美在| 国产免费视频| 九九精品九九| 日本片在线看| 亚洲欧美精选| 亚洲国产精品区| 亚洲激情丁香| 天天插天天操| www在线视频| 黄色毛片在线看| 国产美女视频一区二区三区| 久久这里精品| 国产免费专区| 尤物视频在线观看| 国产丝袜在线播放| 国产成人亚洲综合小说区| 国产第一页在线视频| 国产福利免费观看| 中文字幕一区免费| 国产黄色网页| av中文字幕在线看| 黄色电影网站在线观看| 国产美女视频网站| 国产欧美在线观看视频| 国产一二三区在线视频| 国产天堂素人系列在线视频| 国产三级自拍| jizz在线免费观看| 国产乱子视频| 99热免费观看| 日本不卡1区2区3区| 五月婷婷视频在线观看| 精品亚洲成a人片在线观看| 伊人中文在线| 国产免费av高清在线| 国产成人精品实拍在线| 日本亚洲精品| 91久久麻豆| 人人九九精品| 91久久麻豆| 久久五月精品| 一本久久精品| 中文字幕在线永久在线视频|