- UserType
- public interface UserType {
- /**
- * 返回UserType所映射字段的SQL类型
- * (java.sql.Types中每一种类型都有对应int值)
- * 返回类型为int[],其中包含了映射N个字段的SQL类型代码
- * (UserType可以映射到一个或者多个字段)
- * @return int[] the typecodes
- */
- public int[] sqlTypes();
- /**
- * UserType.nullSafeGet()所返回的自定义数据的类型
- *
- * @return Class
- */
- public Class returnedClass();
- /**
- * 自定义数据类型的比对方法
- * 此方法将用作脏数据检查,参数x、y分别为数据的两个副本
- * 如果equals方法返回false,则Hibernate将认为数据发生变化,并将变化更新到数据库表中
- * @param x
- * @param y
- * @return boolean
- */
- public boolean equals(Object x, Object y) throws HibernateException;
- /**
- * 与上面的equals保持一致
- */
- public int hashCode(Object x) throws HibernateException;
- /**
- * 本方法将在Hibernate进行数据返回时被调用
- * 从JDBC ResultSet读取数据,将其转换为自定义类型后返回
- * 此方法要求对可能能出现null值进行处理(null safe)
- * @param rs a JDBC result set
- * @param names 对应的N个数据库字段名
- * @param owner the containing entity
- * @return Object 类型见returnedClass
- * @throws HibernateException
- * @throws SQLException
- */
- public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException;
- /**
- * 本方法将在Hibernate进行数据保存时被调用
- * 我们可以通过PreparedStateme将自定义数据写入到对应的数据库表字段
- * @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;
- /**
- * 提供自定义类型的完全复制方法,本方法将用构造返回对象<br/>
- * 当nullSafeGet方法调用之后,我们获得了自定义数据对象,在向用户返回自定义数据之前,deepCopy方法将被调用,它将根据自定义数据对象构造一个完全拷贝,并将此拷贝返回给用户,此时我们就得到了自定义数据对象的两个版本,第一个是从数据库读出的原始版本,其二是我们通过deepCopy方法构造的复制版本,原始的版本将有Hibernate维护,复制版由用户使用。<br/>
- * 原始版本用作稍后的脏数据检查依据;Hibernate将在脏数据检查过程中将两个版本的数据进行对比(通过调用equals方法),如果数据发生了变化(equals方法返回false),则执行对应的持久化操作。
- * @param value the object to be cloned, which may be null
- * @return Object a copy
- */
- public Object deepCopy(Object value) throws HibernateException;
- /**
- * 本类型实例是否可变?
- *
- * @return boolean
- */
- public boolean isMutable();
- /**
- * disassemble是H3在UserType中新增的
- * 它是H2中CompositeUserType接口中的方法。
- * 当对象被写入二级缓存之前调用,通过这个方法可以将对象转换为易于在二级缓存中保存的形式
- * 如对于某些无法序列化的数据,将其转化为序列化形式,典型情况:
- * 如对于当前对象对其它实体对象的引用,我们可以考虑将这种引用关系以id值的形式保存”
- * 如果该对象的实例是可变的,则在这个方法中至少要做一次deepCopy,参数value表示要被缓存的对象
- * @param value the object to be cached
- * @return 该对象在二级缓存中形式
- * @throws HibernateException
- */
- public Serializable disassemble(Object value) throws HibernateException;
- /**
- * assemble是H3在UserType中新增的,它是H2中CompositeUserType接口中的方法。
- * "用于将二级缓存中获取的缓存数据重新转换为我们指定的对象类型"
- * 如果该对象的实例是可变的,则在这个方法中至少要做一次deepCopy。
- * @param cached 二级缓存中的数据
- * @param owner 被缓存对象的宿主
- * @return a reconstructed object from the cachable representation
- * @throws HibernateException
- */
- public Object assemble(Serializable cached, Object owner) throws HibernateException;
- /**
- * 对象合并期间使用
- * 用original值替换target的值
- * 对于不可变对象,或者空值,简单返回第一个参数就可以了。对于可变对象,就要返回第一个参数的副本。对于组合值的对象,可以递归替换组合值。
- * @param original the value from the detached entity being merged
- * @param target the value in the managed entity
- * @return the value to be merged
- */
- public Object replace(Object original, Object target, Object owner) throws HibernateException;
- }
ParameterizedType
获取配置文件中的参数,通过mapping或者typedef标签
- public interface ParameterizedType {
- /**
- * 设置通过Hibernate的配置获取的参数
- */
- public void setParameterValues(Properties parameters);
- }
EnhancedUserType( 就是实现其与 string 之间的装换)
- public interface EnhancedUserType extends UserType {
- /**
- * 返回这个对象的SQL语句的文字形式
- */
- public String objectToSQLString(Object value);
- /**
- * 将value对象转换成一个String,并且该string可以用于xml文档
- */
- public String toXMLString(Object value);
- /**
- * 将一个String 转换成一个对象
- */
- public Object fromXMLString(String xmlValue);
- }
转载于:https://blog.51cto.com/xang529/438314