Como fazer Join HQL

Bom to precisando criar um metodo pra retornar um email, de um colaborador porem na classe de um usuario… Tipo na classe usuario eu tenho um atributo Colaborador;

Eu pensei mais o menos assim…
Ai vai o meu Managed Bean

public class UsuarioFaces {
	
	private Usuario usuario;
	private GenericDAO<Usuario> dao;
	private List<Usuario> lista;
	private HttpSession session;
	

	public UsuarioFaces() {
		dao = new DAOFactory().getUsuarioDAO();
		lista = new ArrayList<Usuario>();
		session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
	}
	
	public String verificaUsuario(){   
		Map<String, Object> parametros = new HashMap<String, Object>();   
        parametros.put("log", usuario.getLogin());   
        parametros.put("pass", usuario.getSenha());   
        usuario =  dao.ObjetoPorCriterio("from Usuario u where u.login = :log and u.senha = :pass", parametros);
	        if(usuario != null){
	        	session.setAttribute("user", usuario.getLogin());
	        	return "loginOk";
	        }
	        	FacesUtil.messageError("Login Inválido, Tente Novamente");
	        	return "fail";
    }
// Aki está o Problema eu n consigo fazer isso funcionar
	public String verificaEmail(){
		Map<String, Object> parametros = new HashMap<String, Object>();   
        parametros.put("email", usuario.getColaborador().getEmail());
        usuario =  dao.ObjetoPorCriterio("from Usuario u where u.colaborador.email = :email", parametros);
        return (usuario != null) ? "emailOk" : "fail";
	}

Então esse meu Metodo Verificar Email() num funciona ele so retorna null… e da exception…

Alguem pode me ajudar com isso ja faz mto tempo q tenho esse erro e fico jogando pra frente mas agora ja era preciso conserta-lo kkkkkkk[

Obrigado

Pensei q tinha acertado mas num deu…

public String RecuperarSenha(){
		Map<String, Object> parametros = new HashMap<String, Object>(); 
		parametros.put("email", colaborador.getEmail());
		colaborador = new DAOFactory().getColaboradorDAO().ObjetoPorCriterio("from Colaborador c where c.email = :email", parametros);
			if(colaborador != null){
				Usuario u = new DAOFactory().getUsuarioDAO().procurarPorId(colaborador.getId());
				System.out.println(u.getLogin());
				return "";
			}
			return "";
	}

Eu pensei assim vo pesquisar esse email, se ele tiver eu tento associar esse Colaborador com o usuario para poder pegar o login e senha desse usuario…
mas n deu certo alguem tem alguma ideia?:???

Será que um jeito mais pratico que isso. pq eu fiz mas ta meio embolado…

public void recuperarSenha(){
		Colaborador c = new Colaborador();
		Map<String, Object> parametros = new HashMap<String, Object>(); 
		parametros.put("email", c.getEmail());
		c = new DAOFactory().getColaboradorDAO().ObjetoPorCriterio("from Colaborador c where c.email = :email", parametros);
		System.out.println(c.getNome());
			if(c != null){
				System.out.println("Yes");
				Usuario u = new Usuario();
				u.setColaborador(c);
				System.out.println(u.getColaborador().getEmail());
				u = new DAOFactory().getUsuarioDAO().ObjetoPorCriterio("from Usuario u where u.colaborador.email = :email", parametros);
				System.out.println(u.getLogin());
				
			}
	}