JPA/Hibernate erro uso criteria com Restrictions com Enum

duvida de como setar um atributo que seu conteudo é um Enum

pois qdo uso o comando abaixo me dá erro ja converti pra toString()

e continua dando erro …

c.add( Restrictions.eq(“doc.type”, Type.CPF) );


erro:
 org.hibernate.QueryException: could not resolve property: CPF of: br.com.certisign.ims.data.model.user.ImsUserImpl

public enum Type {
	CPF(0),
	CNPJ(1),
	RG(2),
	PASSPORT(3),
	TITULO(4),
	RUT(5), /* Chile */
	NIS(6), /* PIS/PASEP */
	CEI(7),
	CEIPJ(8),
	CITY_STATE_SUBSCRIPTION(9), /* Inscrição estadual/municipal */
	OTHER(10); 
	
	private final int number;

	private DocumentType(int number){
		this.number = number;
	}

	public int number(){
		return number;
	}

	public static DocumentType valueOf(int id) {
        switch (id) {
            case 0: return CPF;
            case 1: return CNPJ;
            case 2: return RG;
            case 3: return PASSPORT;
            case 4: return TITULO;
            case 5: return RUT;
            case 6: return NIS;
            case 7: return CEI;
            case 8: return CEIPJ;
            case 9: return CITY_STATE_SUBSCRIPTION;
            default: return OTHER;            
        }
    }	
}

Cara, você tem que usar um “conversor” Handler

[code]package br.com.aedas.athenas.core.dao.hibernate.enumHandle;

import java.io.Serializable;

import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;

public abstract class AbstractEnumHandler<C extends Enum> implements UserType {

protected int dbType = 0;						// Db type 
protected Class<C> cClass = null;				// Enum class.

public AbstractEnumHandler(Class<C> cClass, int dbType) {
	
	this.cClass = cClass;
	this.dbType = dbType;
	
}

public int[] sqlTypes() { 

	return new int[] { this.dbType };
	
}


/**
 * @see UserType#returnedClass()
 */
public Class<C> returnedClass() {

	return this.cClass;
	
} 
  

/**
 * @see UserType#deepCopy(Object)
 */
public Object deepCopy(Object value) throws HibernateException{ 
	
    return value;
    
} 


/**
 * @see UserType#isMutable()
 */
public boolean isMutable() { 

	return false;
	
} 


/**
 * @see UserType#assemble(Serializable, Object)
 */
public Object assemble(Serializable cached, Object owner) throws HibernateException {

	return cached;

}


/**
 * @see UserType#disassemble(Object)
 */
public Serializable disassemble(Object value) throws HibernateException { 

	return (Serializable)value; 

} 


/**
 * @see UserType#replace(Object, Object, Object)
 */
public Object replace(Object original, Object target, Object owner) throws HibernateException { 

	return original; 

}


/**
 * @see UserType#hashCode()
 */
public int hashCode(Object x) throws HibernateException { 

	return x.hashCode(); 

}


/**
 * @see UserType#equals(Object)
 */
public boolean equals(Object x, Object y) throws HibernateException { 
	
	return (x == y) && (null != x || null != y) && x.equals(y); 
    
}

}
[/code]

[code]package br.com.aedas.athenas.core.dao.hibernate.enumHandle;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;

public abstract class AbstractEnumToString<C extends Enum> extends AbstractEnumHandler {

/**
 * Creates an enum handler to persist enum as String.
 * @param cClass Enum class.
 */
protected AbstractEnumToString(Class<C> cClass) { 

	super(cClass, Types.VARCHAR); 

} 


/**
 * @see UserType#nullSafeSet(java.sql.PreparedStatement, Object, int)
 */
public Object nullSafeGet(ResultSet rs, String[] names, Object arg2) throws HibernateException, SQLException {

	String name = rs.getString(names[0]); 
    C result = null; 
    if (!rs.wasNull()) { 
   	 
        result = Enum.valueOf(cClass, name);
        
    } 
    
    return result; 

}


/**
 * @see UserType#nullSafeSet(PreparedStatement, Object, int)
 */
@SuppressWarnings("unchecked")
public void nullSafeSet(PreparedStatement ps, Object value, int index) throws HibernateException, SQLException {
	
	if (null == value) {
		
        ps.setNull(index, this.dbType);
        
    } else {
    	
    	ps.setString(index, ((Enum)value).name());
        
    }
	
}

}[/code]

Espero que vc entenda

Segue o link da documentação

http://www.hibernate.org/272.html