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 UserType 自定义类型

转自 :http://www.iteye.com/topic/182797    仔细看看hibernate的DOC发现不少惊奇的东东,后悔自己的旁门助道是多么的无用. 本次主要实现目的. 数据库...
  • liuxianbing119
  • liuxianbing119
  • 2012年02月16日 14:31
  • 2121

Hibernate 客户化映射类型--UserType

Hibernate 的客户化映射类型接口,允许用户以编程的方式创建自定义的映射类型,以实现把持久化类的任意类型的属性映射到数据库 以下例子可以把User类的Integer类型的phone属性映射到u...
  • wuDaSong_
  • wuDaSong_
  • 2012年11月25日 22:43
  • 1893

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

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

介绍Hibernate使用UserType

这里介绍Hibernate使用UserType,UserType就是用户自定义类型,这里的类型指的是除了Hibernate定义的那些类型之外的用户自己定义的。 AD: 51CTO学院:IT精品课...
  • wangshfa
  • wangshfa
  • 2014年03月31日 19:04
  • 2162

Hibernate对自定义类型UserType的用法

Hibernate允许我们自定义映射属性的类型,比如一个学生有联系地址,而联系地址又分为家庭地址和工作地址,我们可以把两个地址信息抽象成一个新的Address类,作为Student的成员变量数据库结构...
  • daryl715
  • daryl715
  • 2007年12月10日 16:05
  • 8007

Hibernate实战_笔记34(映射枚举、实现EnhanceUserType接口)

映射枚举 枚举类型是一个常见的Java惯用语,其中类有着(小)数量不变的不可变实例。 1、在JDK5.0中使用枚举 如果使用JDK5.0,可以给类型安全的枚举使用内建的语言支持。例如,Ratin...
  • com185272358
  • com185272358
  • 2014年03月28日 21:03
  • 1056

Hibernate如何映射enum

  • ice00mouse
  • ice00mouse
  • 2009年05月28日 22:50
  • 906

Hibernate 用户自定义类型 UserType

用户自定义类型。  把从数据库取出来的数据,处理一下再用,保存数据的时候把POJO里的数据处理一下在保存进去。 org.hibernate.usertype.UserType UserType接口: ...
  • ldg81817
  • ldg81817
  • 2009年06月28日 23:29
  • 178

Hibernate自定义数据类型UserType

Hibernate的强大用过的童鞋肯定会知道的,通过OR映射我们可以很方便的实现数据库操作,Hibernate对我们一些类型的映射都提供了很好的支持,但是显然也有不给力的地方,比如简单的注册,一个人可...
  • kevdmx
  • kevdmx
  • 2011年11月11日 12:02
  • 258

Hibernate 3.2 学习笔记 查询和检索

                                                     Hibernate的检索策略---------------------------------...
  • RainyTooo
  • RainyTooo
  • 2006年08月31日 06:50
  • 2577
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate 学习笔记 (1) -- UserType 分析
举报原因:
原因补充:

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