HQL não retorna quando relacionamento é NULL

Boa noite galera, não sei se postei no lugar correto, espero que sim.
Possuo um HQL que quando o relacionamento é null, ele não me retorna o dado, e preciso que seja mostrado, segue:

Meu select ficou assim:

E o dao:

currentSession = HibernateUtil.getSessionFactory().getCurrentSession(); Query query = currentSession.createQuery("SELECT vis.vis_nome AS vis_nome, vis.vis_empresa AS vis_empresa, vis.cid_id.cid_nome AS cid_nome, vis.cid_id.est_id.est_sigla AS est_sigla, vis.cid_id_emp.cid_nome AS cid_nome_emp, vis.cid_id_emp.est_id.est_sigla AS est_sigla_emp, vis.vis_cadastro AS vis_cadastro, visi.visi_entrada AS visi_entrada, visi.visi_saida AS visi_saida, visi.visi_motivo AS visi_motivo FROM Visitante AS vis, Visita AS visi WHERE visi.visi_entrada is null OR visi.visi_entrada = (select max(visii.visi_entrada) from Visita visii where visii.vis_id = vis.vis_id)"); query.setResultTransformer(Transformers.aliasToBean(RelVisitante.class)); return (List<RelVisitante>) query.list();
Reparem que eu faço a conversão do resultado dessa query, para uma outra classe.
O meu problema está no relacionamento do vis.cid_id.
Esse meu vis.cid_id é um objeto Cidade, porém vejam que eu seleciono o vis.cid_id.cid_nome que o retorno é uma String, e na minha nova classe está correto.
Eu recebo os dados corretamente na nova classe, o problema é que esse objeto cid_id pode ser NULL no banco, e quando esse objeto é NULL o banco não retorna NADA dessa linha, fazendo com que eu perca esse dado, e eu preciso receber esse dado mesmo ele sendo NULL…

Alguém tem alguma solução para esse caso?
Obs: Eu não retorno o objeto Cidade porque essa nova classe eu passo para o JasperReports, e do modo que eu montei, esse campo Cidade precisa ser o nome String.

Obrigado desde já!
Abraço!

Utilize o left join ou então is empty: JPA Consultas e Dicas.

Obrigado pela vida Hebert!
Consegui fazer meu código e veja como ficou:

SELECT vis.vis_nome AS vis_nome, vis.vis_empresa AS vis_empresa, cid_id.cid_nome AS cid_nome, est_id.est_nome AS est_nome, (select max(visi.visi_entrada) from Visita visi where visi.vis_id = vis.vis_id) AS visi_entrada FROM Visitante AS vis LEFT JOIN vis.cid_id AS cid_id LEFT JOIN cid_id.est_id AS est_id
Estou com problemas agora que, eu preciso pegar também o visi.visi_saida e visi.visi_motivo dessa linha que foi selecionado o max(visi.visi_entrada)… Como eu faria isso sem ter que fazer outro subselect? Creio que se eu fizesse outro subselect, a minha query ficaria ainda mais lenta, correto?