Hibernate + Mysql mapear view [RESOLVIDO]

Boa noite pessoal, seguinte eu gostaria de saber como faço o mapeamento de uma view no hibernate

minha view :


create or replace view viewtelefones as select tel.tel_codigo as codigotelefone,
concat('(',substr(tel.tel_numero,1,2),')',substr(tel.tel_numero,3,4),'-',substr(tel.tel_numero,7,4)) AS telefone,
tel.pes_codigo as codigopessoa, tel.ope_codigo as codigooperadora,
ope.ope_descricao as operadora
from tel_telefones as tel
inner join ope_operadoras as ope on (ope.ope_codigo = tel.ope_codigo)

minha classe:


package Classes;

import javax.persistence.Entity;
import javax.persistence.NamedNativeQuery;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.EntityResult;
import javax.persistence.FieldResult;

@Entity
@SqlResultSetMapping(name="viewtelefones",
					entities={@EntityResult(entityClass=Telefone.class
										   ,fields = {
						                              @FieldResult(name="Telefone.codigo", column = "codigotelefone"),
						                              @FieldResult(name="Telefone.numero", column = "numero")}),
					          @EntityResult(entityClass=Operadora.class
					                       ,fields = {
													  @FieldResult(name="Operadora.codigo", column = "codigooperadora"),
													  @FieldResult(name="Operadora.descricao", column = "operadora")}),
				              @EntityResult(entityClass=Cliente.class
				                            ,fields ={ 
				            	                      @FieldResult(name="Cliente.codigo", column = "codigopessoa")})
                              }
					)
@NamedNativeQuery(name="viewtelefones",query = "select tel.tel_codigo as codigotelefone, "
                                                     + "concat('(',substr(tel.tel_numero,1,2),')',substr(tel.tel_numero,3,4),'-',substr(tel.tel_numero,7,4)) AS telefone, "
                                                     + "tel.pes_codigo as codigopessoa, tel.ope_codigo as codigooperadora, "
                                                     + "ope.ope_descricao as operadora "
                                                     + "from tel_telefones as tel "
                                                     + "inner join ope_operadoras as ope on (ope.ope_codigo = tel.ope_codigo) ", resultClass = ViewTelefoneOperadora.class)
public class ViewTelefoneOperadora {
	
	private Telefone telefone;
	public Telefone getTelefone() {
		return telefone;
	}
	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}
	
	private Operadora operadora;
	public Operadora getOperadora() {
		return operadora;
	}
	public void setOperadora(Operadora operadora) {
		this.operadora = operadora;
	}
	
	private Cliente cliente;
	public Cliente getCliente() {
		return cliente;
	}
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
}

andei pesquisando e vi que posso mapear minha view usando uma classe com campos comuns, ou usando os objetos referentes a esses campos, achei que seria mais padrão usar os objetos e vi esse tipo de mapeamento, só que minha aplicação não esta mais rodando e falando que estou com problemas no meu mapeamento.
Dá uma força ae pessoal se tiver faltando alguma coisa e tal.

Pessoal, consegui fazer funciona como eu queria, fico dessa forma aqui:

Classe telefone:


package Classes;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import javax.persistence.Table;
import org.hibernate.annotations.ForeignKey;


@NamedNativeQueries({
	@NamedNativeQuery(
			          name="pesquisarporcliente",
			          query="select tel_codigo, "
				          + "concat('(',substr(tel_numero,1,2),')',substr(tel_numero,3,4),'-',substr(tel_numero,7,4)) AS tel_numero, "
				          + "pes_codigo, ope_codigo "
				          + "from tel_telefones "
				          + "where pes_codigo = :codigopessoa",
				      resultClass = Telefone.class )
	})
@Entity
@Table(name="tel_telefones")
public class Telefone{
		
	@Id
    @GeneratedValue
    @Column(name="tel_codigo", length = 6)
	private int codigo;
	public int getCodigo() {
		return codigo;
	}
	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}
	
	@Column(name="tel_numero",  nullable=false, length = 11)
	private String numero;
	public String getNumero() {
		return numero;
	}
	public void setNumero(String numero) {
		this.numero = numero;
	}
	
	@JoinColumn(name="ope_codigo",  nullable=false, insertable=true, updatable=true)
    @ManyToOne(fetch = FetchType.LAZY)
	@ForeignKey(name="telope")
	private Operadora operadora;
	public Operadora getOperadora() {
		return operadora;
	}
	public void setOperadora(Operadora operadora) {
		this.operadora = operadora;
	}
	
	@JoinColumn(name="pes_codigo",  nullable=false,insertable = true,updatable = true)
    @ManyToOne(fetch = FetchType.LAZY)
	private Cliente cliente;
	public Cliente getCliente() {
		return cliente;
		
	}
	public void setCliente(Cliente cliente){
		this.cliente = cliente;
	}
	
	@Override
    public int hashCode() {
        int hash = 5;
        hash = 17 * hash + this.codigo;
        return hash;
    }

	@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        Telefone telefone = new Telefone();
        try{
        telefone = (Telefone) obj;
        }catch(Exception ex){
        	return false;
        }
        if (this.getCodigo() != telefone.getCodigo()) {
            return false;
        }
        return true;
    }
	
}

persistencia


package Persistencia;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import org.hibernate.Query;
import org.hibernate.Session;
import util.HibernateUtil;
import Classes.Telefone;
import Enums.StatusSQL;

public class TelefoneBD {
	
	public List<Telefone> selecionarTelefone(Telefone telefone)throws Throwable{
		List<Telefone> listaTelefones = new ArrayList<Telefone>();
		Session sessaoTelefone = HibernateUtil.getSessionFactory().getCurrentSession();
		try{
			
        	sessaoTelefone.beginTransaction();
        	Query querySelecionarTelefone = sessaoTelefone.getNamedQuery("pesquisarporcliente").setString("codigopessoa", String.valueOf(telefone.getCliente().getCodigo()));
        	listaTelefones = (List<Telefone>) querySelecionarTelefone.list();
		}catch(Exception ex){
			throw ex;
		}finally{
			sessaoTelefone = null;
        }
		return listaTelefones;
	}
	
	public StatusSQL excluirTelefones(Telefone TelefoneExcluir)throws Throwable{
		StatusSQL resultado = StatusSQL.DESCONHECIDO;
		Session sessaoTelefone = HibernateUtil.getSessionFactory().getCurrentSession();
		try{
			sessaoTelefone.beginTransaction();
            Query queryExcluirTelefones = sessaoTelefone.createQuery("delete from Telefone telefone where telefone.cliente = :cliente");
            queryExcluirTelefones.setParameter("cliente", TelefoneExcluir.getCliente());
            //sessaoTelefone.getTransaction().commit();
            queryExcluirTelefones.executeUpdate();
            resultado = StatusSQL.SUCESSO;
		}catch(Exception ex){
			if (sessaoTelefone.getTransaction().isActive()){
                sessaoTelefone.getTransaction().rollback();
            }
			resultado = StatusSQL.FALHOU;
			throw ex;
		}finally{
			sessaoTelefone = null;
		}
		return resultado;
	}
	
	public StatusSQL excluirTelefone(Telefone TelefoneExcluir)throws Throwable{
		StatusSQL resultado = StatusSQL.DESCONHECIDO;
		Session sessaoTelefone = HibernateUtil.getSessionFactory().getCurrentSession();
		try{
			sessaoTelefone.beginTransaction();
            sessaoTelefone.flush();
            sessaoTelefone.clear();
            sessaoTelefone.delete(TelefoneExcluir);
            sessaoTelefone.getTransaction().commit();
            resultado = StatusSQL.SUCESSO;
		}catch(Exception ex){
			if (sessaoTelefone.getTransaction().isActive()){
                sessaoTelefone.getTransaction().rollback();
            }
			resultado = StatusSQL.FALHOU;
			throw ex;
		}finally{
			sessaoTelefone = null;
		}
		return resultado;
	}
	
	public StatusSQL cadastrarTelefone(Telefone TelefoneCadastrar)throws Throwable{
		StatusSQL resultado = StatusSQL.DESCONHECIDO;
		Session sessaoTelefone = HibernateUtil.getSessionFactory().getCurrentSession();
		try{
			sessaoTelefone.beginTransaction();
            sessaoTelefone.flush();
            sessaoTelefone.clear();
            sessaoTelefone.save(TelefoneCadastrar);
            sessaoTelefone.getTransaction().commit();
            resultado = StatusSQL.SUCESSO;
		} catch (Exception ex) {
            if (sessaoTelefone.getTransaction().isActive()){
                sessaoTelefone.getTransaction().rollback();
            }
            resultado = StatusSQL.FALHOU;
            throw ex;
		}finally{
			sessaoTelefone = null;
		}
		return resultado;
	}
	
	public StatusSQL atualizarTelefone(Telefone TelefoneCadastrar)throws Throwable{
		StatusSQL resultado = StatusSQL.DESCONHECIDO;
		Session sessaoTelefone = HibernateUtil.getSessionFactory().getCurrentSession();
		try{
			sessaoTelefone.beginTransaction();
            sessaoTelefone.flush();
            sessaoTelefone.clear();
            sessaoTelefone.update(TelefoneCadastrar);
            sessaoTelefone.getTransaction().commit();
            resultado = StatusSQL.SUCESSO;
		} catch (Exception ex) {
            if (sessaoTelefone.getTransaction().isActive()){
                sessaoTelefone.getTransaction().rollback();
            }
            resultado = StatusSQL.FALHOU;
            throw ex;
		}finally{
			sessaoTelefone = null;
		}
		return resultado;
	}
	
}