您的位置:首页 > 其它

Hibernate的自定义数据类型实现接口——UserType详解

2010-05-29 16:17 956 查看
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import net.sf.hibernate.HibernateException;
/**
* @author hy-he
*
*/
public interface UserType {
/**
* 返回UserType所映射字段的SQL类型(java.sql.Types)
* 返回类型为int[],其中包含了映射个字段的SQL类型代码
* (UserType可以映射到一个或者多个字段)
* @return
*/
public int[]sqlTypes();
/**
* UserType.nullSafeGet()所返回的自定义数据类型
* @return
*/
public Class returnedClass();
/**
* 自定义数据类型的比对方法
* 此方法将用作脏数据检查,参数x、y分别为数据的两个副本
* 如果equals方法返回false,则Hibernate将认为数据发生变化,并将变化更新到数据库表中
* @param x
* @param y
* @return
* @throws HibernateException
*/
public boolean equals(Object x,Object y)throws HibernateException;
/**
* 从JDBC ResultSet读取数据,将其转换为自定义类型后返回
* (此方法要求对可能出现null值进行处理)
* names中包含了当前自定义类型的映射字段名称
* @param rs
* @param names
* @param owner
* @return
* @throws HibernateException
* @throws SQLException
*/
public Object nullSafeGet(ResultSet rs,String[] names,Object owner)throws HibernateException,SQLException;
/**
* 本方法将在Hibernate进行数据保存时被调用
* 我们可以通过PreparedStateme将自定义数据写入到对应的数据库表字段
* @param st
* @param value
* @param index
* @throws HibernateException
* @throws SQLException
*/
public void nullSafeSet(PreparedStatement st,Object value,int index)throws HibernateException,SQLException;
/**
* 提供自定义类型的完全复制方法
* 本方法将用构造返回对象
* 当nullSafeGet方法调用之后,我们获得了自定义数据对象,在向用户返回自定义数据之前,
* deepCopy方法将被调用,它将根据自定义数据对象构造一个完全拷贝,并将此拷贝返回给用户
* 此时我们就得到了自定义数据对象的两个版本,第一个是从数据库读出的原始版本,其二是我们通过
* deepCopy方法构造的复制版本,原始的版本将有Hibernate维护,复制版由用户使用。原始版本用作
* 稍后的脏数据检查依据;Hibernate将在脏数据检查过程中将两个版本的数据进行对比(通过调用
* equals方法),如果数据发生了变化(equals方法返回false),则执行对应的持久化操作
*
* @param value
* @return
* @throws HibernateException
*/
public Object deppCopy(Object value)throws HibernateException;
/**
* 本类型实例是否可变
* @return
*/
public boolean isMutable();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐