posts - 66,  comments - 11,  trackbacks - 0
          package com.wyq.hibernate;

          import java.io.Serializable;
          import java.sql.PreparedStatement;
          import java.sql.ResultSet;
          import java.sql.SQLException;
          import java.sql.Types;
          import java.util.ArrayList;
          import java.util.List;

          import org.hibernate.Hibernate;
          import org.hibernate.HibernateException;
          import org.hibernate.usertype.UserType;

          public class EMailList implements UserType {
              
              
          private List emails;
              
              
          private static final char SPLITTER = ';';
              
              
          private static final int[] TYPES = new int[]{Types.VARCHAR};

              
          public boolean isMutable() {
                  
          return false;
              }
              
          public int[] sqlTypes() {
                  
          return TYPES;
              }
              
          public Class returnedClass() {
                  
          return List.class;
              }
              
          /**
               * 創建一個新的List實例,包含原有List實例中的所有元素。
               
          */
              
          public Object deepCopy(Object value) throws HibernateException {
                  List sourcelist 
          = (List)value;
                  List targetlist 
          = new ArrayList();
                  targetlist.addAll(sourcelist);
                  
          return targetlist;
              }
              
          /**
               * 判斷email list是否發生改變
               
          */
              
          public boolean equals(Object x, Object y) throws HibernateException {
                  
          if(x == y)return true;
                  
          if(x!=null && y!=null){
                      List xList 
          = (List)x;
                      List yList 
          = (List)y;
                      
                      
          if(xList.size() != yList.size())return false;
                      
          for(int i=0;i<xList.size();i++){
                          String str1 
          = (String)xList.get(i);
                          String str2 
          = (String)yList.get(i);
                          
          if(!str1.equals(str2))return false;
                      }
                      
          return true;
                  }
                  
          return false;
              }
              
          /**
               * 從resultSet中取出email字段,并將其解析為List類型后返回
               
          */
              
          public Object nullSafeGet(ResultSet rs, String[] names, Object owner)
                  
          throws HibernateException, SQLException {
                  String value 
          = (String)Hibernate.STRING.nullSafeGet(rs,names[0]);
                  
          if(value!=null){
                      
          return parse(value);
                  }
          else{
                      
          return null;
                  }
              }
              
          /**
               * 將List型的email信息組成字符串后保存到email字段
               
          */
              
          public void nullSafeSet(PreparedStatement st, Object value, int index)
                  
          throws HibernateException, SQLException {
                  System.out.println(
          "Set method executed");
                  
          if(value!=null){
                      String str 
          = "";//assemble((List)value);
                      Hibernate.STRING.nullSafeSet(st, str, index);
                  }
          else{
                      Hibernate.STRING.nullSafeSet(st, value, index);
                  }
              }
              
          /**
               * 將String拼裝為一個字符串,以";"分隔
               
          */
              
          private String assemble(List emailList){
                  StringBuffer strBuf 
          = new StringBuffer();
                  
          for(int i=0;i<emailList.size()-1;i++){
                      strBuf.append(emailList.get(i)).append(SPLITTER);
                  }
                  strBuf.append(emailList.get(emailList.size()
          -1));
                  
          return strBuf.toString();
              }
              
          /**
               * 將以";"分隔的字符串解析為一個字符串數組
               
          */
              
          private List parse(String value){
                  String[] strs 
          = org.apache.commons.lang.StringUtils.split(value,String.valueOf(SPLITTER));
                  List emailList 
          = new ArrayList();
                  
          for(int i=0;i<strs.length;i++){
                      emailList.add(strs[i]);
                  }
                  
          return emailList;
              }
              
          public Object assemble(Serializable arg0, Object arg1)
                      
          throws HibernateException {
                  
          // TODO Auto-generated method stub
                  return null;
              }

              

              
          public Serializable disassemble(Object arg0) throws HibernateException {
                  
          // TODO Auto-generated method stub
                  return null;
              }

              

              
          public int hashCode(Object arg0) throws HibernateException {
                  
          // TODO Auto-generated method stub
                  return 0;
              }
              
          public Object replace(Object arg0, Object arg1, Object arg2)
                      
          throws HibernateException {
                  
          // TODO Auto-generated method stub
                  return null;
              }

              

          }

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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關注blogs

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 巴林左旗| 新巴尔虎右旗| 泾川县| 汨罗市| 宁晋县| 滦南县| 旬阳县| 赤峰市| 富顺县| 大埔区| 偃师市| 衡阳县| 随州市| 大新县| 沂源县| 石狮市| 德惠市| 巍山| 永吉县| 唐山市| 合阳县| 西和县| 年辖:市辖区| 景谷| 垫江县| 灯塔市| 榆林市| 阜阳市| 望都县| 博兴县| 抚州市| 汉中市| 齐齐哈尔市| 综艺| 三门县| 隆回县| 普安县| 西乌| 安泽县| 孝义市| 乾安县|