posts - 66,  comments - 11,  trackbacks - 0
              我們的目標是為數據邏輯層及業務邏輯層提供更加易于操作的對象,根據這里的情況,將email字段映射為一個List集合

          類型是個不錯的選擇,如何將一個字段映射為List類型,Hibernate并沒有提供原生支持,我們必須實現自己的UserType.
            
          package com.wyq.hibernate;

          public interface UserType {
              
          /**
               * 返回UserType所映射字段的SQL類型(java.sql.Types)
               * 返回類型為int[],其中包含了映射各字段的SQL類型代碼
               * (UserType可以映射到一個或者多個字段)
               * 
          @see java.sql.Types
               * 
          @return int[] the typecodes
               
          */
              
          public int[] sqlTypes();
              
          /**
               * UserType.nullSafeGet()所返回的自定義數據類型
               * 
          @return Class
               
          */
              
          public Class returnedClass();
              
          /**
               * 自定義數據類型的對比方法
               * 此方法將用作臟數據檢查,參數x,y分別為數據的2個副本
               * 如果equals方法返回false,則Hibernate將認為數據發生變化,并將變化更新到庫表中
               
          */
              
          public boolean equals(Object x,Object y)throws HiberanteException;
              
          /**
               * 從JDBC ResultSet讀出數據,將其轉換為自定義類型后返回
               * (此方法要求對可能出現的null值進行處理)
               * names中包含了當前自定義類型的映射字段名稱。
               
          */
              
          public Object nullSafeGet(ResultSet rs,String[] names,Object owner)throws HibernateException,SQLException;
              
          /**
               * 本方法將在Hibernate進行數據保存時被調用
               * 我們可以通過PreparedStatement將自定義數據寫入對應的庫表字段
               
          */
              
          public void nullSafeSet(PreparedStatement st,Object value,int index)throws HibernateException,SQLException;
              
          /**
               * 提供自定義類型的完全復制方法
               * 本方法將用作構造返回對象
               * 當nullSafeGet方法調用之后,我們獲得了自定義數據對象,在向用戶返回自定義數據之前,deepCopy方法將被調用,
               * 它將根據自定義數據對象構造一個完全拷貝,并將此拷貝返回給用戶使用。
               * 此時,我們就得到了自定義數據對象的2個版本,第一個是從數據庫讀出的原始版本,其二是我們通過deepCopy構造的
               * 復制版本,原始版本將由Hibernate負責維護,復制版本將由用戶使用,原始版本用作稍后的臟數據檢查一句;Hibernate
               * 將在臟數據檢查過程中將這2個版本的數據進行比對,如果數據發生了變化,則執行對應的持久化操作。
               * 數據發生了變化,則執行對應的持久化操作。
               
          */
              
          public Object deepCopy(Object value)throws HibernateException;
              
          /**
               * 本類型實例是否可變
               
          */
              
          public boolean isMutable();
          }

          posted on 2009-10-16 15:59 王永慶 閱讀(165) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關注blogs

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 开封市| 威远县| 柯坪县| 田东县| 西畴县| 三原县| 隆尧县| 五河县| 扶风县| 泸州市| 陈巴尔虎旗| 桂平市| 九江市| 贵定县| 青海省| 仪征市| 马公市| 阿瓦提县| 上虞市| 府谷县| 喀喇| 封开县| 广平县| 宁强县| 寻乌县| 临江市| 河东区| 纳雍县| 济阳县| 四子王旗| 榆社县| 子长县| 广德县| 平陆县| 九龙坡区| 金平| 平和县| 会泽县| 凤城市| 靖西县| 永仁县|