@SuppressWarnings("unchecked")
  @Override
  public void set(
      PreparedStatement st, Object value, int index, SharedSessionContractImplementor session)
      throws HibernateException, SQLException {

    final Object param = value == null ? null : columnMapper.toNonNullValue((T) value);
    columnMapper.getHibernateType().nullSafeSet(st, param, index, session);
  }
  @Override
  public Object get(ResultSet rs, String name, SharedSessionContractImplementor session)
      throws HibernateException, SQLException {

    @SuppressWarnings("unchecked")
    final J hibernateValue = (J) (columnMapper.getHibernateType().get(rs, name, session));
    if (hibernateValue == null) {
      return null;
    }
    return columnMapper.fromNonNullValue(hibernateValue);
  }
 @Override
 public T fromStringValue(String xml) throws HibernateException {
   if (xml == null) {
     return null;
   }
   return columnMapper.fromNonNullString(xml);
 }
 @SuppressWarnings("unchecked")
 @Override
 public String toString(Object value) throws HibernateException {
   if (value == null) {
     return null;
   }
   return columnMapper.toNonNullString((T) value);
 }
 @Override
 public boolean isModified(
     Object dbState,
     Object currentState,
     boolean[] checkable,
     SharedSessionContractImplementor session)
     throws HibernateException {
   return columnMapper.getHibernateType().isModified(dbState, currentState, checkable, session);
 }
 @Override
 public Object replace(
     Object original,
     Object target,
     SharedSessionContractImplementor session,
     Object owner,
     @SuppressWarnings("rawtypes") Map copyCache)
     throws HibernateException {
   return columnMapper.getHibernateType().replace(original, target, session, owner, copyCache);
 }
 @Override
 public int getHashCode(Object x, SessionFactoryImplementor factory) throws HibernateException {
   return columnMapper.getHibernateType().getHashCode(x, factory);
 }
 @Override
 public Object assemble(
     Serializable cached, SharedSessionContractImplementor session, Object owner)
     throws HibernateException {
   return columnMapper.getHibernateType().assemble(cached, session, owner);
 }
 @Override
 public boolean isDirty(Object old, Object current, SharedSessionContractImplementor session)
     throws HibernateException {
   return columnMapper.getHibernateType().isDirty(old, current, session);
 }
 @Override
 public int compare(Object x, Object y) {
   return columnMapper.getHibernateType().compare(x, y);
 }
 @Override
 public boolean[] toColumnNullness(Object value, Mapping mapping) {
   return columnMapper.getHibernateType().toColumnNullness(value, mapping);
 }
 @Override
 public int sqlType() {
   return columnMapper.getSqlType();
 }
 @SuppressWarnings("rawtypes")
 @Override
 public Class getReturnedClass() {
   return columnMapper.returnedClass();
 }
 @Override
 public int getHashCode(Object x) throws HibernateException {
   return columnMapper.getHibernateType().getHashCode(x);
 }
 @Override
 public boolean isComponentType() {
   return columnMapper.getHibernateType().isComponentType();
 }
 @Override
 public int[] sqlTypes(Mapping mapping) throws MappingException {
   return new int[] {columnMapper.getSqlType()};
 }
 @Override
 public boolean isCollectionType() {
   return columnMapper.getHibernateType().isCollectionType();
 }
 @Override
 public Serializable disassemble(
     Object value, SharedSessionContractImplementor session, Object owner)
     throws HibernateException {
   return columnMapper.getHibernateType().disassemble(value, session, owner);
 }
 @Override
 public Object deepCopy(Object value, SessionFactoryImplementor factory)
     throws HibernateException {
   return columnMapper.getHibernateType().deepCopy(value, factory);
 }
 @Override
 public String getName() {
   return columnMapper.returnedClass().getSimpleName();
 }
 @Override
 public String toLoggableString(Object value, SessionFactoryImplementor factory)
     throws HibernateException {
   return columnMapper.getHibernateType().toLoggableString(value, factory);
 }
 @Override
 public boolean isEntityType() {
   return columnMapper.getHibernateType().isEntityType();
 }
 @Override
 public void beforeAssemble(Serializable cached, SharedSessionContractImplementor session) {
   columnMapper.getHibernateType().beforeAssemble(cached, session);
 }
 @Override
 public int getColumnSpan(Mapping mapping) throws MappingException {
   return columnMapper.getHibernateType().getColumnSpan(mapping);
 }
 @Override
 public Object hydrate(
     ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner)
     throws HibernateException, SQLException {
   return columnMapper.getHibernateType().hydrate(rs, names, session, owner);
 }
 @Override
 public Size[] defaultSizes(Mapping mapping) throws MappingException {
   return columnMapper.getHibernateType().defaultSizes(mapping);
 }
 @Override
 public Object semiResolve(Object value, SharedSessionContractImplementor session, Object owner)
     throws HibernateException {
   return columnMapper.getHibernateType().semiResolve(value, session, owner);
 }
 @Override
 public boolean isEqual(Object x, Object y) throws HibernateException {
   return columnMapper.getHibernateType().isEqual(x, y);
 }
 @Override
 public boolean isEqual(Object x, Object y, SessionFactoryImplementor factory)
     throws HibernateException {
   return columnMapper.getHibernateType().isEqual(x, y, factory);
 }