Hibernate + Oracle

Ola pessoal, sou novo em java e estou estudando hibernate, eu preciso mapear o seguinte object type do oracle

CREATE OR REPLACE TYPE "OBJ_FICHAS" under obj_pessoas( CNPJ Varchar2(18), Inscricao_Estadual Varchar2(20), Fantasia Varchar2(40), status ref obj_status, classificacao ref obj_classificacao) /

Depois de pesquisar muito achei o seguinte artigo no própio site do hibernate: http://www.hibernate.org/261.html

Eu implementei o UserType, e ficou da seguinte forma:

[code]package comercial;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Struct;
import java.sql.Types;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;

public class categoriausertype implements UserType{

private static final String db_object_type = "obj_classificacao";
private static final int SQL_TYPE = Types.STRUCT;

public int[] sqlTypes() {
    return new int[] {SQL_TYPE};
}

public Class returnedClass() {
    return categoria.class;
}

public boolean equals(Object x, Object y) throws HibernateException {
    if (x == y){
        return true;
    }
    if (x == null || y == null){
        return false;
    }        
    final categoria cat1 = (categoria) x;
    final categoria cat2 = (categoria) y;
    return equals(cat1.getCategoria(), cat2.getCategoria())
    && equals(cat1.getCodigo(), cat2.getCodigo());
    
}

public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
    assert names.length == 1;
    final Struct struct = (Struct) rs.getObject(names[0]);
    if (rs.wasNull()){
        return null;
    }
    final categoria cat = new categoria();
    cat.setCategoria((String) struct.getAttributes()[1] );
    cat.setCodigo( (Integer) struct.getAttributes()[0] );
    return cat;
}

public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
    if (value == null) {
        st.setNull(index, SQL_TYPE, db_object_type);
    } else {
        
        final categoria cat = (categoria) value;
        final Object[] values = new Object[] {cat.getCodigo(),cat.getCategoria()};
        final Connection connection = st.getConnection();
        StructDescriptor sc = StructDescriptor.createDescriptor(db_object_type, connection);
        final STRUCT struct = new STRUCT(sc,connection, values);
        st.setObject(index, struct, SQL_TYPE);
    }
}

public Object deepCopy(Object value) throws HibernateException {
    if (value == null){
        return null;
    }
    final categoria cat = (categoria) value;
    final categoria catc = new categoria();
    catc.setCategoria(cat.getCategoria());
    catc.setCodigo(cat.getCodigo());
    return catc;
}

public boolean isMutable() {
    return true;
}

}
[/code]

O mapeamento ficou da seguinte forma:

[code]<?xml version="1.0" encoding="UTF-8"?>

[/code]

Só q quando eu tento fazer qql coisa eu tenho a seguinte exceção:

Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyConnection cannot be cast to oracle.jdbc.OracleConnection
at oracle.sql.StructDescriptor.createDescriptor(StructDescriptor.java:159)
at oracle.sql.StructDescriptor.createDescriptor(StructDescriptor.java:130)
at comercial.categoriausertype.nullSafeSet(categoriausertype.java:75)
at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:146)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1997)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2243)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at comercial.menu_principal.jButton3MouseClicked(menu_principal.java:174)
at comercial.menu_principal.access$400(menu_principal.java:26)
at comercial.menu_principal$5.mouseClicked(menu_principal.java:80)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Alguem tem alguma idéia de como mapear esse Object Type de qualquer outro jeito ou onde estou errando?
Desde ja agradeço