我自定义了一个List类型的。。为什么能存取出的类的对象。。就那个字段是NULL..
请高手解决一下

解决方案 »

  1.   

    package hibernatetest;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.SessionFactory;
    import  org.hibernate.usertype.UserType;
    public class EmailList implements UserType {
    private static final String SPLITTER=";";
    private static final int[] TYPES=new int[]{Types.VARCHAR};
    public Object assemble(Serializable arg0, Object arg1)
    throws HibernateException {
    // TODO Auto-generated method stub
    return null;
    } /**
     * 创建一个新的List类,包含原有List实例中的所有元素
     */
    public Object deepCopy(Object arg0) throws HibernateException {
    // TODO Auto-generated method stub
         List sourceList  =  (List)arg0;
             List targetList  =   new ArrayList();
             if(sourceList!=null)
             {
             targetList.addAll(sourceList);
              return  targetList;
             }else{
              return null;
             } } public Serializable disassemble(Object arg0) throws HibernateException {
    // TODO Auto-generated method stub
    return null;
    }
     /**
      * 判断emailList是否发生改变
      */
    public boolean equals(Object x, Object y) throws HibernateException {
    // TODO Auto-generated method stub
    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;
    } public int hashCode(Object arg0) throws HibernateException {
    // TODO Auto-generated method stub
    return 0;
    } public boolean isMutable() {
    // TODO Auto-generated method stub
    return false;
    }
    /**
     * 从resultSet中取出email字段,并将其解析为List类后返回
     * @param rs
     * @param names
     * @param owner
     * @return Object
     * @throws HibernateException
     * @throws SQLException
     */
    public Object nullSafeGet(ResultSet arg0, String[] arg1, Object arg2)
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
            String value  =  (String)Hibernate.STRING.nullSafeGet(arg0, arg1[0]);
           if (value != null ) {
                return  parses(value);
           }  else  {
                return null ;
           }
    }
    /**
     * 将以";"分隔的字符串解析为一个字符串数组
     * @param value
     * @return List
     */
    private List parses(String value) {
    String strs[]=value.split(SPLITTER);
    List emailList=new ArrayList();
    int size=strs.length;
    for(int i=0;i<size;i++)
    {
    emailList.add(strs[i]);
    }
    // TODO Auto-generated method stub

    return emailList;
    }
        /**
         * 将List型的email信息组装字符串之后保存到email字段
         */
    public void nullSafeSet(PreparedStatement arg0, Object arg1, int arg2)
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
            if (arg1  !=   null ) {
                String str  =  assemble((List)arg1);
                Hibernate.STRING.nullSafeSet(arg0, str, arg2);
            }  else  {
                Hibernate.STRING.nullSafeSet(arg0, arg1, arg2);
            } } public Object replace(Object arg0, Object arg1, Object arg2)
    throws HibernateException {
    // TODO Auto-generated method stub
    return null;
    } public Class returnedClass() {
    // TODO Auto-generated method stub
    return List.class;
    } public int[] sqlTypes() {
    // TODO Auto-generated method stub
    return TYPES;
    }
    /**
     * 将String拼装成一个字符串,以";"分隔
     * @param emailList
     * @return String
     */
    private String assemble(List emailList) {
    // TODO Auto-generated method stub
          StringBuffer strBuf  =   new  StringBuffer();
             for  ( int  i  =   0 ; i  <  emailList.size() - 1 ; i ++ ) {
                strBuf.append((String)emailList.get(i)).append(SPLITTER);            
            }
            strBuf.append(emailList.get(emailList.size() - 1 ));
             return  strBuf.toString();
    }
    }看看是不是哪里写的不对