|
package org.william.First;
import org.hibernate.usertype.*;import java.io.Serializable;import java.sql.Types;import java.util.List;import java.util.ArrayList;import java.util.Vector;import org.hibernate.type.*;import org.hibernate.*;
import javax.sql.*;import java.sql.*;
/** * @author wangliang138840 * */public class EMailList implements UserType{ private List eMails; private static final char SPLITE = ';'; //各个字段的类型 public static final int[] TYPES = new int[]{Types.VARCHAR }; //本实例是否可变 public boolean isMutable(){ return false; } //返回字段类型 public int[] sqlTypes(){ return TYPES; } //返回字段类型类 public Class returnedClass(){ return List.class; } /* (non-Javadoc) * @see org.hibernate.usertype.UserType#deepCopy(java.lang.Object) * 完全拷贝一个变量实体; */ public Object deepCopy(Object value) throws HibernateException{ List targetList = new ArrayList(); if(value == null)return targetList; List sourceList = (List)value; targetList.addAll(sourceList); return targetList; } /* (non-Javadoc) * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object) * 判断两个实体是否相等 */ public boolean equals(Object x, Object y) throws HibernateException{ if( x == y) return true; if(x != null && y != null){ List listX = (List)x; List listY = (List)y; if(listX.size() != listY.size()) return false; for(int i = 0; i< listX.size(); i++){ String str1 = (String)listX.get(i); String str2 = (String)listY.get(i); if(!equals(str1,str2)) return false; } return true; } return false; } public int hashCode(Object x) throws HibernateException{ return -1; } 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 db2oo(value); else return new ArrayList(); } /* (non-Javadoc) * @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int) */ public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException{ if(value != null){ Object str = oo2db(value); Hibernate.STRING.nullSafeSet(st, str, index); }else{ Hibernate.STRING.nullSafeSet(st, value, index); } } /** * @param value * @return */ private Object oo2db(Object value){ StringBuffer strBuf = new StringBuffer(); List list = (List)value; for(int i = 0; i<list.size() -1; i++){ strBuf.append(list.get(i)).append(SPLITE); } strBuf.append(list.get(list.size()-1)); return (Object)strBuf.toString(); } /** * @param value * @return */ private List db2oo(String value){ Vector strs = org.apache.tools.ant.util.StringUtils.split(value, SPLITE); List emailList = new ArrayList(); for(int i = 0; i<strs.size(); i++){ emailList.add(strs.get(i)); } return emailList; }
/* (non-Javadoc) * @see org.hibernate.usertype.UserType#assemble(java.io.Serializable, java.lang.Object) */ 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 null; } }
|