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

本文主要介绍了Hibernate中UserType接口的相关内容。包含接口中各方法的功能,如返回映射字段SQL类型、自定义数据类型比对、从ResultSet读取数据、数据保存操作等,还说明了脏数据检查及数据复制等机制,与数据库交互紧密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值