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 王永庆 阅读(145) 评论(0)  编辑  收藏 所属分类: HIBERNATE

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(1)

随笔分类

随笔档案

关注blogs

搜索

  •  

最新评论

阅读排行榜

评论排行榜