Hibernate 学习笔记 (1) -- UserType 分析

原创 2007年10月08日 03:16:00
 让我们先来看一下UserType的接口定义,

import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.hibernate.HibernateException;

public interface UserType {

    
/**
     *返回:映射于这个类型的字段的SQL类型,
     *这种被返回的类型已经被定义在 java.sql.Types中
     *一个类型可以映射在多个字段, 也就是说可返回多个SQL类型
     *
@see java.sql.Types
     *
@return int[]    the typecodes
     
*/

    
public int[] sqlTypes();

    
    
/**
     *返回的class是由 nullSafeGet()    方法调用
     *
@return Class
     
*/

    
public Class returnedClass();

    
/**
     *比较两个实例是否相等
     * 
     *
     * 
@param x 实例 x
     * 
@param y 实例 y
     * 
@return boolean 两个实例相等返回true
     
*/

    
public boolean equals(Object x, Object y) throws HibernateException;

    
/**
     * 返回x的hashcode
     * 
@param x 
     * 
@return int 对象x的hashcode
     
*/

    
public int hashCode(Object x) throws HibernateException;

    
/**
     * 获得一个映射于一条 JDBC Resultset 的实例, 并且要考虑到返回null的情况
     * 
@param rs a JDBC result set
     * 
@param names 与本类型相关的所有字段名称的数组
     * 
@param owner the containing entity???
     * 
@return Object
     * 
@throws HibernateException
     * 
@throws SQLException
     
*/

    
public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException;

    
/**
     *把一个映射类型的实例写入 prepared statement
     *  A multi-column type should be written
     * to parameters starting from <tt>index</tt>.
     *
     * 
@param st a JDBC prepared statement
     * 
@param value the object to write
     * 
@param index statement parameter index
     * 
@throws HibernateException
     * 
@throws SQLException
     
*/

    
public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException;

    
/**
     * Return a deep copy of the persistent state, stopping at entities and at
     * collections. It is not necessary to copy immutable objects, or null
     * values, in which case it is safe to simply return the argument.
     *
     * 
@param value the object to be cloned, which may be null
     * 
@return Object a copy
     
*/

    
public Object deepCopy(Object value) throws HibernateException;

    
/**
     * Are objects of this type mutable?
     *
     * 
@return boolean
     
*/

    
public boolean isMutable();

    
/*
     *以下两个方法是针对该对象在缓存中的存取, 因为该类型是不可变类型, 因此在存取过程中不作改变。
     *
     
*/

    
public Serializable disassemble(Object value) throws HibernateException;
    
public Object assemble(Serializable cached, Object owner) throws HibernateException;

    
/*
     *不详
     
*/

    
public Object replace(Object original, Object target, Object owner) throws HibernateException;
}

1, 首先定义该类型在数据库中的 sql 类型。 sqlType()
2, 在定义该类型的 java 类型 returnedClass()
3,  定义该类型是否可变 isMutable() 直接影响下面的其它的方法的实现
4, 若该类型可比较, (主要用于排序, 搜索) equals(Object x, Object y)
5,  定义该类型的唯一编码 hashCode(Object obj)
6,  定义该类型的深考贝方法 deepCopy(Object obj)
7,  定义如何向数据库中存储该类型 nullSafeSet(PreparedStatement st, Object value, int index)
8,  定义如何从数据库中取得该类型 nullSafeSet(ResultSet rs, String[] names, Object owner)
9, 其它三种方法针对二级存储, 以后再讨论。

相关文章推荐

Hibernate实战_笔记32(考虑定制的映射类型、创建UserType)

考虑定制的映射类型 拿前面章节的的Address类的映射作为组件来举例: 这个值类型映射很简单,用户自定义的新Java类型的所有属性都被映射到内建的SQL数据类型的单独的列。然而...

Hibernate学习笔记_songjignhao_1

  • 2012年11月28日 23:03
  • 264KB
  • 下载

Hibernate学习笔记(1-13)

  • 2013年06月22日 23:54
  • 1.5MB
  • 下载

Hibernate 学习笔记 - Lifecycle 1

any instance of object only can be three states: 1

hibernate学习笔记-1

hibernate学习笔记 1.annonation有两种方式: JPA -------重点 hibernate-extension jpa是标准,hibernate是实现 jdbc是标准 ...

Hibernate学习笔记(1)

这个假期准备把hibernate学会,学习这个hibernate的动机就是觉得自己在开发项目的时候,数据库操作方面的代码效率不高,只是使用了简单的JDBC操作数据库,没有数据库连接池或者缓存之类的机制...

hibernate学习笔记 1

1-hb初步 第一个hibernate项目 1、新建java项目 2、创建User Library,加入如下jar  * HIBERNATE_HOME/hibernate3.jar  * H...
  • sjf8013
  • sjf8013
  • 2012年07月06日 11:05
  • 291

JavaEE学习笔记之SSH—Hibernate(1)

Hibernate介绍Hibernate是一个开放源代码的对象关系映射框架(ORM),它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hiber...

hibernate学习笔记第一天(1)

WEB内容回顾 Javaee三层结构 1.web层:struts2框架   2.service层:spring框架   3.dao层:Hibernate框架        (1)对数据库进行CRUD操...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate 学习笔记 (1) -- UserType 分析
举报原因:
原因补充:

(最多只允许输入30个字)