`
anyeeye
  • 浏览: 145521 次
  • 来自: ...
社区版块
存档分类
最新评论

CompositeUserType_1

阅读更多
<id name="id" type="xxCompositeUserType"> 
    <column name="c1"/> 
    <column name="c2" /> 
</id>

public class DoubleIntegerType implements CompositeUserType {  
      
    private static final int[] TYPES = { Types.INTEGER, Types.INTEGER };  
 
    public int[] sqlTypes() {  
        return TYPES;  
    }  
 
    public String[] getPropertyNames() {  
        return new String[] {"integer1", "integer2"};  
    }  
 
    public Type[] getPropertyTypes() {  
        return new Type[] {Hibernate.INTEGER, Hibernate.INTEGER};  
    }  
 
    public Object getPropertyValue(Object component, int property)  
            throws HibernateException {  
        return ((Integer[]) component)[property];  
    }  
 
    public void setPropertyValue(Object component, int property, Object value)  
            throws HibernateException {  
        ( (Integer[]) component )[property] = (Integer) value;  
    }  
 
    public Class returnedClass() {  
        return Integer[].class;  
    }  
 
    public boolean equals(Object x, Object y) throws HibernateException {  
        if (x == y) {  
            return true;  
        }  
        if (x == null || y == null) {  
            return false;  
        }  
        Integer[] i1 = (Integer[]) x;  
        Integer[] i2 = (Integer[]) y;  
        return ( i1[0].equals(i2[0]) && i1[1].equals(i2[1]) );  
    }  
 
    public Object nullSafeGet(ResultSet rs, String[] names,  
            SessionImplementor session, Object owner) throws HibernateException,  
            SQLException {  
        Integer first = (Integer) Hibernate.INTEGER.nullSafeGet(rs, names[0]);  
        Integer second = (Integer) Hibernate.INTEGER.nullSafeGet(rs, names[1]);  
        return ( first==null && second==null ) ? null : new Integer[] { first, second };  
    }  
 
    public void nullSafeSet(PreparedStatement st, Object value, int index,  
            SessionImplementor session) throws HibernateException, SQLException {  
        Integer[] integers = (value==null) ? new Integer[2] : (Integer[]) value;  
        Hibernate.INTEGER.nullSafeSet(st, integers[0], index);  
        Hibernate.INTEGER.nullSafeSet(st, integers[1], index+1);  
    }  
 
    public Object deepCopy(Object value) throws HibernateException {  
        if ( value==null ) return null;  
        Integer[] result = new Integer[2];  
        Integer[] input = (Integer[]) value;  
        result[0] = input[0];  
        result[1] = input[1];  
        return result;  
    }  
 
    public boolean isMutable() {  
        return true;  
    }  
 
    public Serializable disassemble(Object value, SessionImplementor session)  
            throws HibernateException {  
        return (Serializable) deepCopy(value);  
    }  
 
    public Object assemble(Serializable cached, SessionImplementor session,  
            Object owner) throws HibernateException {  
        return deepCopy(cached);  
    }  
}  
分享到:
评论

相关推荐

    简要分析Java的Hibernate框架中的自定义类型

    1. 实现`UserType`接口:这是最常见的自定义类型实现方式。`UserType`提供了对Java对象和数据库列之间转换的一系列方法,包括获取SQL类型的数组(`sqlTypes()`)、返回对象的Java类(`returnedClass()`)、比较两个...

    hibernate(api_介绍)

    1. **访问数据库操作接口** - **Session**:这是与数据库交互的主要接口,提供了对数据库的基本CRUD(Create, Read, Update, Delete)操作。虽然非线程安全,但它是轻量级的,每个客户端请求应对应一个Session实例...

    hibernate(api 介绍).docx

    也可以通过实现 org.hibernate.usertype.CompositeUserType 接口来自定义数据映射类型。 可扩展接口 1. org.hibernate.usertype.UserType:可以自定义数据映射类型。 2. org.hibernate.dialect.Dialect abstract_...

    java Hibernate 一对多自身关联问题

    1. A功能:这是保存一个顶级菜单,没有与其他记录关联。在Hibernate中,可以直接通过`session.save(catalog)`来保存新的顶级菜单,因为它们不需要与其他记录建立关联。 2. B功能:这个功能用于根据父ID添加子分类,...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 映射继承关系  12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 映射继承关系  12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 映射继承关系  12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 映射继承关系  12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件 ...

    用Hibernate实现领域对象的自定义字段

    1. **定义Java类**:为自定义字段创建一个Java类,这个类将封装特定的数据结构。例如,如果我们有一个日期范围字段,可以创建一个`DateRange`类,包含两个`LocalDate`属性,分别代表起始和结束日期。 ```java ...

    hbm xml配置详解 ssh框架

    如果内置的映射类型无法满足需求,开发者可以通过实现 `net.sf.hibernate.UserType` 或 `net.sf.hibernate.CompositeUserType` 接口来自定义映射类型。自定义映射类型允许开发者将任何Java类映射到数据库的特定类型...

    hibernate3.2API

    1. **核心API**:这是Hibernate的核心部分,包括`SessionFactory`、`Session`、`Transaction`等关键接口和类。`SessionFactory`是创建`Session`对象的工厂,`Session`负责实际的数据库操作,而`Transaction`则用于...

    Hibernate实战(第2版 中文高清版)

     5.3.5 创建CompositeUserType   5.3.6 参数化定制类型   5.3.7 映射枚举   5.4 小结   第6章 映射集合和实体关联   6.1 值类型的set、bag、list和map   6.1.1 选择集合接口   6.1.2 映射set   ...

    hibernate4.1中文api

    #### 1. 教程 ##### 1.1 第一部分 - 第一个Hibernate应用程序 - **设置**: 安装必要的开发环境,包括Java SDK、IDE(如Eclipse或IntelliJ IDEA)、Hibernate库等。 - **第一节**: 简介Hibernate的基本概念,如...

Global site tag (gtag.js) - Google Analytics